MySQL(八)----ビュー
7254 ワード
注意、MySQLは5.0.1バージョンからビュー機能を提供し、使用時にバージョンに注意します.また、ビューをサポートしていない古いバージョンがビューを提供する新しいバージョンにアップグレードされた場合、ビューを使用するには、ビューに関連する権限を含む権限テーブルをアップグレードする必要があります.
一、ビューとは
ビューは仮想的に存在するテーブルであり、クエリー文が格納され、クエリーの結果が表示されます.より率直に言えば、テーブルからいくつかの情報をクエリーする必要がある場合、関連するSQL文を作成し、これらのSQL文をビューとして保存する必要があります.これらのビューを呼び出すときは、SQL文を実行することに相当し、所望の結果を得ることができます.
まず例を挙げてみましょう
二、ビューの役割
上記の例に基づいて、ビューが何なのかを大体感じることができますが、具体的な役割はまだよく分からないかもしれません.ビューがあるかどうかはどうでもいいと思っています.焦らないでください.その役割を紹介したら、必要だと思います.
作用一:簡単;ビューは多くの機能をカプセル化した関数のようなもので、複雑なクエリー文を1つのビューに格納します.これにより、頻繁にこれらの文を使用する必要がある場合、繰り返し書く必要がなく、直接ビューを使用して置き換えることができます.例:
作用2:データベースを再構築するが、プログラムの実行に影響しない.例:
作用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:更新するには、関連する検査条件を満たす必要があります.
注:ビュー作成時に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文のテーブルを参照する.
例を挙げます.
上の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ビューの表示
現在のライブラリの下にあるすべてのビューを表示します.
show tablesコマンドには、すべてのテーブルの名前だけでなく、すべてのビューの名前も表示されます.
show table status[from db_name][like'pattern']コマンドは、テーブルの情報だけでなく、ビューの情報も表示できます.
ビューの定義を参照するには、SHOW CREATE VIEWコマンドを使用します.
システムテーブルを表示することもできます.schema.viewsでは、ビューに関する情報を表示します.
一、ビューとは
ビューは仮想的に存在するテーブルであり、クエリー文が格納され、クエリーの結果が表示されます.より率直に言えば、テーブルからいくつかの情報をクエリーする必要がある場合、関連する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 ]
:
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文は、次のタイプではありません.
例を挙げます.
--
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)