MySQLビューの詳細

5502 ワード

前言:
MySQLでは、ビューが最も一般的なデータベース・オブジェクトの1つかもしれません.では、ビューとテーブルの違いを知っていますか.ビューの作成と使用に注意する点を知っていますか?多くの人がビューをよく知っているだけで、ビューを詳しく知りたいと思っている人が見ているかもしれませんよ.この文章では、ビューの概念、作成、使用方法について詳しく紹介します.
1.ビューの定義と簡単な紹介
ビューは、SQL文の結果セットに基づいて可視化されたテーブルです.すなわち、ビューは仮想的に存在するテーブルであり、テーブルのすべてまたは一部のレコードを含んでもよいし、1つのテーブルまたは複数のテーブルから作成してもよいです.ビューを使用すると、データテーブル内のすべてのデータを表示するのではなく、必要なデータだけを取得できます.ビューを作成すると、実際にはデータベースでSELECT文が実行され、SELECT文にはフィールド名、関数、演算子が含まれており、ユーザーにデータを表示します. 
ビューのデータは元のテーブルのデータに依存するため、元のテーブルのデータが変化すると、表示されるビューのデータも変化します.例えば、データテーブルにデータを挿入すると、ビューを表示するときに、ビューにも同じデータが挿入されていることがわかります.ビューは、実際には定義済みのクエリー形式のテーブルで構成されています.
2.ビューの作成と使用方法
ビュー標準構文を作成するには、次の手順に従います.
CREATE
    [OR REPLACE]
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = user]
    [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]

文法の解読:
1)OR REPLACE:既存のビューを置き換えることを表し、そのビューが存在しない場合、CREATE OR REPLACE VIEWはCREATE VIEWと同じである.
2)ALGORITHM:ビュー選択アルゴリズムを表し、デフォルトアルゴリズムはUNDEFINED(未定義):MySQLは使用するアルゴリズムを自動的に選択する;mergeマージ;temptableテンポラリテーブルで、一般的にこのパラメータは明示的に指定されません.
3)DEFINER:ビューの作成者または定義者を指定します.このオプションを指定しない場合、ビューを作成するユーザーは定義者です.
4)SQL SECURITY:SQLセキュリティ、デフォルトはDEFINER.
5)select_statement:select文を表し、ベーステーブルまたは他のビューから選択できます.
6)WITH CHECK OPTION:ビューの更新時に制約を保証することを表し、デフォルトはCASCADEDである.
実際には、毎日ビューを作成するときに、各パラメータを指定する必要はありません.一般的には、ビューを作成することをお勧めします.
create view  [(column_list)]
as select  
with check option;

次に、作成例をいくつか示します.
#     
mysql> create view v_F_players(  ,  ,  ,  )
    -> as
    -> select PLAYERNO,NAME,SEX,PHONENO from PLAYERS
    -> where SEX='F'
    -> with check option;
Query OK, 0 rows affected (0.00 sec)

mysql> desc v_F_players;
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
|       | int(11)  | NO   |     | NULL    |       |
|       | char(15) | NO   |     | NULL    |       |
|       | char(1)  | NO   |     | NULL    |       |
|       | char(13) | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> select * from  v_F_players;
+--------+-----------+--------+------------+
|       |         |       |           |
+--------+-----------+--------+------------+
|      8 | Newcastle | F      | 070-458458 |
|     27 | Collins   | F      | 079-234857 |
|     28 | Collins   | F      | 010-659599 |
|    104 | Moorman   | F      | 079-987571 |
|    112 | Bailey    | F      | 010-548745 |
+--------+-----------+--------+------------+
5 rows in set (0.02 sec)

#     
mysql> create view v_match
    -> as 
    -> select a.PLAYERNO,a.NAME,MATCHNO,WON,LOST,c.TEAMNO,c.DIVISION
    -> from 
    -> PLAYERS a,MATCHES b,TEAMS c
    -> where a.PLAYERNO=b.PLAYERNO and b.TEAMNO=c.TEAMNO;
Query OK, 0 rows affected (0.03 sec)

mysql> select * from v_match;
+----------+-----------+---------+-----+------+--------+----------+
| PLAYERNO | NAME      | MATCHNO | WON | LOST | TEAMNO | DIVISION |
+----------+-----------+---------+-----+------+--------+----------+
|        6 | Parmenter |       1 |   3 |    1 |      1 | first    |
|       44 | Baker     |       4 |   3 |    2 |      1 | first    |
|       83 | Hope      |       5 |   0 |    3 |      1 | first    |
|      112 | Bailey    |      12 |   1 |    3 |      2 | second   |
|        8 | Newcastle |      13 |   0 |    3 |      2 | second   |
+----------+-----------+---------+-----+------+--------+----------+
5 rows in set (0.04 sec)

ビューは、select from view_を使用するなど、ベーステーブルと同様に使用できます.nameまたはselect from view_name where ... ,ビューは、不要なデータをフィルタリングし、関連するカラム名をカスタムカラム名で置き換えることができます.ビューは、ベース・テーブルのテーブル構造とテーブル名がどんなに複雑であっても、アクセス・インタフェースとして機能します.一般的にビューはクエリーにのみ使用され、ビュー自体にデータがないため、ビューに対するdml操作は最終的にベーステーブルに現れ、ビューに対してdelete、update、insert操作を行い、元のテーブルも更新され、dropビューの元のテーブルは変わらず、ビューはtruncateできません.しかし、一般的にはビューの更新を避け、dml操作で元のテーブルを直接更新することができます.
3.ビュー関連ベストプラクティス
以下では、ビューの利点を簡単に紹介します.これらの利点により、ビューの適用シーンを簡単にまとめます.
1)単純:ビューを使用するユーザは、後の対応するテーブルの構造、関連条件、フィルタ条件に全く関心を持つ必要はなく、ユーザにとってすでにフィルタされた複合条件の結果セットである.
2)セキュリティ:ビューを使用するユーザーは、クエリーが許可されている結果セットにのみアクセスできます.テーブルに対する権限管理は、行や列に制限されませんが、ビューを使用すると簡単に実現できます.
3)データ独立:一旦ビューの構造が確定したら、テーブル構造の変化がユーザーに与える影響を遮蔽でき、ソーステーブルの増加列はビューに影響しない;ソース・テーブルがカラム名を変更すると、ビューを変更してアクセス者に影響を与えることなく解決できます.
要するに、ビューの使用のほとんどは、データのセキュリティを確保し、クエリーの効率を向上させるためです.たとえば、いくつかのテーブルの関連結果を頻繁に使用すると、ビューを使用して処理したり、サードパーティのプログラムがビジネス・ライブラリを呼び出したりして、必要に応じてビューを作成してサードパーティのプログラムにクエリーすることができます.
日常的なビューの使用とメンテナンスの過程で、個人は以下のいくつかの実践をまとめ、参考にすることができます.
  • ビューのネーミングでは、vまたはviewで始まるなど、接頭辞を統一することを推奨します.
  • SQL SECURITYはデフォルトのDEFINERを使用して、ビュー定義者の権限がビューをクエリーすることを示します.
  • ビュー定義者は、関連プログラムユーザの使用を推奨する.
  • ビューでは、あまりテーブルを関連付けないで、データが冗長になります.
  • ビューをクエリーするときは条件を付けて、毎回すべてのデータをクエリーすることをお勧めしません.
  • ビューの移行は、新しい環境にビューの定義者ユーザーがいることに注意してください.
  • ビューのデータを直接更新しないでください.ビューはクエリー
  • のみです.
    作者:kun_jian
    リンク:https://juejin.im/post/5df6e1b351882512480a826b
    出典:掘金
    著作権は作者の所有である.商業転載は著者に連絡して許可を得てください.非商業転載は出典を明記してください.