サーチ…


構文

  • CREATE VIEW view_name AS SELECT column_name(s)FROM table_name WHERE条件です。 ///シンプルなビューの作成構文

  • CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED |マージ| TEMPTABLE}] [DEFINER = {user | CURRENT_USER}] [SQLセキュリティ| DEFINER | INVOKER}] VIEWビュー名[(列リスト)] AS select_statement [WITH [CASCADED |ローカル] CHECK OPTION]; ///完全なビューの作成構文

  • DROP VIEW [IF EXISTS] [db_name。]ビュー名; ///ドロップビューの構文

パラメーター

パラメーター詳細
ビュー名ビューの名前
SELECTステートメントビューにパックされるSQLステートメント1つ以上のテーブルからデータをフェッチするSELECT文にすることができます。

備考

ビューは仮想テーブルであり、返されるデータは含まれません。複雑な問合せを何度も何度も書くことを避けることができます。

  • ビューが作成される前に、その仕様は完全にSELECTステートメントから構成されます。 SELECT文にFROM句にサブクエリを含めることはできません。
  • 一度ビューが作成されると、テーブルのように大部分が使用され、テーブルのようにSELECTできます。

テーブルのいくつかの列を他のユーザーから制限したい場合は、ビューを作成する必要があります。

  • たとえば、組織では、マネージャが「Sales」という名前のテーブルから情報をほとんど表示しないようにしたいが、ソフトウェアエンジニアがテーブル「Sales」のすべてのフィールドを表示する必要はない。ここでは、マネージャとソフトウェアエンジニアのために2つの異なるビューを作成できます。

パフォーマンスVIEWsは構文的な砂糖です。ただし、ビューの選択が折り畳まれた同等のクエリよりパフォーマンスが悪い場合もあれば、悪い場合もあります。オプティマイザはこれを「折り畳み」しようとしますが、必ずしも成功するとは限りません。 MySQL 5.7.6ではオプティマイザの機能がさらに強化されました。しかし、 VIEWを使用しても、問合せを高速化することはできません。

ビューを作成する

特権

CREATE VIEW文には、ビューに対するCREATE VIEW権限と、SELECT文で選択された各列に対する権限が必要です。 SELECTステートメントの他の場所で使用される列の場合は、SELECT特権が必要です。 OR REPLACE句が存在する場合は、ビューに対するDROP権限も必要です。このセクションの後半で説明するように、CREATE VIEWにはDEFINER値に応じてSUPER特権が必要な場合があります。

ビューが参照されると、権限チェックが行われます。

ビューはデータベースに属します。デフォルトでは、デフォルトのデータベースに新しいビューが作成されます。特定のデータベースに明示的にビューを作成するには、完全修飾名

例えば:

db_name.view_name

mysql> CREATE VIEW test.v AS SELECT * FROM t;

注 - データベース内では、ベーステーブルとビューは同じ名前空間を共有するので、ベーステーブルとビューは同じ名前を持つことはできません。

VIEWは次のことができます:

  • 多くの種類のSELECT文から作成する
  • ベーステーブルまたは他のビューを参照
  • 結合、UNION、およびサブクエリを使用する
  • SELECTはテーブルを参照する必要はありません

もう一つの例

次の例では、別のテーブルから2つの列を選択するビューと、それらの列から計算された式を定義しています。

mysql> CREATE TABLE t (qty INT, price INT);
mysql> INSERT INTO t VALUES(3, 50);
mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
mysql> SELECT * FROM v;
+------+-------+-------+
| qty  | price | value |
+------+-------+-------+
|    3 |    50 |   150 |
+------+-------+-------+

制限事項

  • MySQL 5.7.7より前では、SELECT文にFROM句にサブクエリを含めることはできません。
  • SELECTステートメントは、システム変数またはユーザー定義変数を参照することはできません。
  • ストアド・プログラム内で、SELECTステートメントはプログラム・パラメーターまたはローカル変数を参照することはできません。
  • SELECTステートメントは、プリペアドステートメントパラメーターを参照することはできません。
  • 定義に参照されているテーブルまたはビューが存在する必要があります。ビューが作成された後、テーブルまたはビューをドロップすることができます。
    定義はを指します。この場合、ビューを使用するとエラーが発生します。この種の問題のビュー定義をチェックするには、CHECK TABLEステートメントを使用します。
  • 定義はTEMPORARYテーブルを参照することはできません。
    TEMPORARYビューを作成します。
  • トリガーをビューに関連付けることはできません。
  • SELECT文の列名のエイリアスは、最大エイリアスではなく、64文字の最大列長と照合されます
    256文字の長さ)。
  • VIEWは、同等のSELECTと同様に最適化することも最適化しないこともできます。それ以上に最適化することはまずありません。

2つのテーブルからのビュー

ビューは、複数の表からデータを取り込むために使用できる場合に最も便利です。

CREATE VIEW myview AS
SELECT a.*, b.extra_data FROM main_table a 
LEFT OUTER JOIN other_table b 
ON a.id = b.id

MySQLビューでは、ビューはマテリアライズされません。 SELECT * FROM myviewという簡単なクエリを実行すると、mysqlは実際にシーンの後ろにLEFT JOINを実行します。

作成されたビューは、他のビューやテーブルに結合することができます

VIEWによる表の更新

VIEWはテーブルのように非常に機能します。あなたはできますがUPDATE表を、あなたは、またはそのテーブルにビューを更新することができない可能性があります。一般に、ビュー内のSELECTが一時表を必要とするほど複雑な場合、 UPDATEは許可されません。

GROUP BYUNIONHAVINGDISTINCT 、およびいくつかのサブクエリのようなものは、ビューを更新できないようにします。 リファレンスマニュアルの詳細。

ビューを削除する

- 現在のデータベースにビューを作成して削除します。

CREATE VIEW few_rows_from_t1 AS SELECT * FROM t1 LIMIT 10;
DROP VIEW few_rows_from_t1;

- 異なるデータベースのテーブルを参照するビューを作成して削除する。

CREATE VIEW table_from_other_db AS SELECT x FROM db1.foo WHERE x IS NOT NULL;
DROP VIEW table_from_other_db;


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow