MySQL(八)----ビュー

7254 ワード

注意、MySQLは5.0.1バージョンからビュー機能を提供し、使用時にバージョンに注意します.また、ビューをサポートしていない古いバージョンがビューを提供する新しいバージョンにアップグレードされた場合、ビューを使用するには、ビューに関連する権限を含む権限テーブルをアップグレードする必要があります.
一、ビューとは
ビューは仮想的に存在するテーブルであり、クエリー文が格納され、クエリーの結果が表示されます.より率直に言えば、テーブルからいくつかの情報をクエリーする必要がある場合、関連するSQL文を作成し、これらのSQL文をビューとして保存する必要があります.これらのビューを呼び出すときは、SQL文を実行することに相当し、所望の結果を得ることができます.
まず例を挙げてみましょう
1.    、           
mysql> create table temp (qty int,price int);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into temp values(3,50),(5,60);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from temp;
+------+-------+
| qty  | price |
+------+-------+
|    3 |    50 |
|    5 |    60 |
+------+-------+
2 rows in set (0.00 sec)

2.            
mysql> create view v as select qty,price,qty*price as value from temp;
Query OK, 0 rows affected (0.01 sec)

mysql> select * from v;
+------+-------+-------+
| qty  | price | value |
+------+-------+-------+
|    3 |    50 |   150 |
|    5 |    60 |   300 |
+------+-------+-------+
2 rows in set (0.00 sec)


二、ビューの役割
上記の例に基づいて、ビューが何なのかを大体感じることができますが、具体的な役割はまだよく分からないかもしれません.ビューがあるかどうかはどうでもいいと思っています.焦らないでください.その役割を紹介したら、必要だと思います.
作用一:簡単;ビューは多くの機能をカプセル化した関数のようなもので、複雑なクエリー文を1つのビューに格納します.これにより、頻繁にこれらの文を使用する必要がある場合、繰り返し書く必要がなく、直接ビューを使用して置き換えることができます.例:
        user name  goods name。       sql  :
select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id;
          ,    other。  
create view other as select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id;
      ,       user name goods name:
 select * from other;

作用2:データベースを再構築するが、プログラムの実行に影響しない.例:
        ,   user    usera  userb,         :
           :usera id,name,age  
           :userb id,name,sex  
            sql   :select * from user;            ,                     。  ,       ,    。
  sql      :
create view user as select a.name,a.age,b.sex from usera as a, userb as b where a.name=b.name;
    name     。
         sql  :select * from user;     。            ,            。

作用3:安全;作成されたビューは、ユーザー情報クエリーの権限を分離するためにアクセスできる情報を規定しています.また、データテーブルを管理する権限はありますが、特定の行や列に制限することはできません.ビューはできます.
作用4:データが独立して明確である;ビューの構造が確立されると、元のテーブルの構造やデータなどの変化がユーザに与える影響を遮断することができ、どのようなデータが欲しいのか、どのようなビューを作成するのか、非常に明確で直感的である.
これらが明らかになったら、ビューの削除・変更の具体的な操作について説明します.
三、ビュー操作
3.1ビューの作成または変更
ビューの作成にはCREATE VIEW権限が必要であり、クエリーに関連するカラムにはSELECT権限が必要です.CREATE OR REPLACEまたはALTERで修正する場合は、ビューのDROP権限が必要です.ビューを作成する構文は次のとおりです.
CREATE [ OR REPLACE ] [ ALGORITHM = { UNDEFINED | MERGE | TEMPTABLE } ] VIEW view_name [ (column_list) ] AS select_statement [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
  • OR REPLACEを使用してビューを変更するか、CREATE OR REPLACEをALTERに直接置き換えると修正構文になります.
  • UNDEFINED:指定アルゴリズムが定義されていません.MERGE:グラフデータを更新すると、実際のテーブルのデータが更新されます(デフォルト).TEMPTABLE:検索のみで更新できない;
  • CASCADED(デフォルト):このビューに対するすべてのビューの条件を満たす必要があります.LOCAL:このビューの条件を満たすだけで更新できます.
  • WITH CHECK OPTION:更新するには、関連する検査条件を満たす必要があります.
  •            :
    create view v as select qty,price,qty*price as value from temp;
    
              :
    create or replace view v as select qty,price,qty*price as value from temp;
    

    注:ビュー作成時にFORMキーの後ろにサブクエリを含めることはできません.必要に応じて、サブクエリの内容をビューとして作成し、ビューを作成できます.
    ビューが更新できるかどうかは、主に次の4つの条件を満たす必要があります.
          1. OR REPLACEを使用して作成します.
          2. ALGORITHMパラメータはTEMPTABLEではありません.
          3. 検査条件キーワードCASCADEまたはLOCALは関連規定を満たす必要がある.
          4. ビューの作成時に文データをクエリーするSQL文は、次のタイプではありません.
  • はキーワードを含む:集約関数(SUM,MIN,MAX,COUNTなど)、DISTINCT、GROUP BY、HAVING、UNION、UNIOALL;
  • 定数ビュー
  • SELECTにはサブクエリが含まれています.
  • JOIN;
  • FROMは新しいビューとは接続できません.
  • WHERE文のサブクエリは、FORM文のテーブルを参照する.

  • 例を挙げます.
    --    
    create or replace view pi as select 3.1415926 as pi;
    
    --select      
    create or replace view city_view as select (select city from city where city_id=1);

    上の3番目の条件についてもう少し説明します.例えば、クエリー条件num<10を定義したビューview 1を作成します.view 1に基づいてCASCADEDを使用してビューview 2を作成し、クエリー条件num>5を定義します.このときview 2を更新設定num=10とすると、view 2の条件を満たすことができview 1の条件を満たすことができず、更新に失敗する.ただし、view 2がキーワードLOCALを使用している場合は、view 2自体の条件を満たすだけで更新に成功します.
    3.2ビューの削除
    ユーザは、ビューのDROP権限が必要であることを前提として、1つまたは複数のビューを一度に削除できます.関連する構文は次のとおりです.
            DROP VIEW [ IF EXISTS ] view_name [, view_name] .... [ RESTRICT | CASCAD ]
     
    3.3ビューの表示
    現在のライブラリの下にあるすべてのビューを表示します.
    mysql> show full tables where table_type like 'view';
    +-----------------+------------+
    | Tables_in_test1 | Table_type |
    +-----------------+------------+
    | v               | VIEW       |
    +-----------------+------------+
    1 row in set (0.01 sec)

    show tablesコマンドには、すべてのテーブルの名前だけでなく、すべてのビューの名前も表示されます.
    mysql> show tables;
    +-----------------+
    | Tables_in_test1 |
    +-----------------+
    | ai              |
    | autoincre_demo  |
    | autoincre_demo2 |
    | city            |
    | country         |
    | dept            |
    | emp1            |
    | myisam_char     |
    | payment_2006    |
    | payment_2007    |
    | payment_all     |
    | salary          |
    | t               |
    | tab_memory      |
    | te              |
    | temp            |
    | v               |
    | vc              |
    +-----------------+
    18 rows in set (0.00 sec)

    show table status[from db_name][like'pattern']コマンドは、テーブルの情報だけでなく、ビューの情報も表示できます.
    mysql> show table status like 'v' \G;
    *************************** 1. row ***************************
               Name: v
             Engine: NULL
            Version: NULL
         Row_format: NULL
               Rows: NULL
     Avg_row_length: NULL
        Data_length: NULL
    Max_data_length: NULL
       Index_length: NULL
          Data_free: NULL
     Auto_increment: NULL
        Create_time: NULL
        Update_time: NULL
         Check_time: NULL
          Collation: NULL
           Checksum: NULL
     Create_options: NULL
            Comment: VIEW
    1 row in set (0.00 sec)

    ビューの定義を参照するには、SHOW CREATE VIEWコマンドを使用します.
    mysql> show create view v \G
    *************************** 1. row ***************************
                    View: v
             Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v` AS select `temp`.`qty` AS `qty`,`temp`.`price` AS `price`,(`temp`.`qty` * `temp`.`price`) AS `value` from `temp`
    character_set_client: gbk
    collation_connection: gbk_chinese_ci
    1 row in set (0.00 sec)

    システムテーブルを表示することもできます.schema.viewsでは、ビューに関する情報を表示します.
    mysql> select * from views where table_name  = 'v' \G
    *************************** 1. row ***************************
           TABLE_CATALOG: def
            TABLE_SCHEMA: test1
              TABLE_NAME: v
         VIEW_DEFINITION: select `test1`.`temp`.`qty` AS `qty`,`test1`.`temp`.`price` AS `price`,(`test1`.`temp`.`qty` * `test1`.`temp`.`price`) AS `value` from `test1`.`temp`
            CHECK_OPTION: NONE
            IS_UPDATABLE: YES
                 DEFINER: root@localhost
           SECURITY_TYPE: DEFINER
    CHARACTER_SET_CLIENT: gbk
    COLLATION_CONNECTION: gbk_chinese_ci
    1 row in set (0.01 sec)