ここでは、MySQLの「ビュー」とは何か、およびそれらの使用方法について説明します。
MySQLには、ビューを作成する機能があります。 。 ビュー は、呼び出されたときに結果セットを生成する保存されたクエリとして定義されます。ビューを「仮想テーブル」と呼ぶ人もいます。
泥のように澄んでいますか?もう一度やり直しましょう。
ビューとは何ですか?
ビューは、データベースに保存するクエリです。その後、(クエリを再度書き出すのではなく)そのビューを呼び出すだけで後で実行できます。
ビューは複雑なクエリで構成されている可能性がありますが、テーブルであるかのように結果が表示されます。したがって、ビューをテーブルであるかのようにクエリできます。
たとえば、3つの異なるテーブルからデータを選択する複雑なクエリを作成できます。この複雑なクエリを実行する必要があるたびに入力するか、クエリをビューとして保存することができます。ビューとして保存したら、簡単なSELECT
を実行できます。 複雑なクエリの結果を返すステートメント。ただし、もちろん、必要に応じて、ビューに対して複雑なクエリを作成することもできます。
ビューを作成する
ビューの作成は非常に簡単です。クエリの前に1行のコードを追加して、実行するだけです。ビューはすぐにデータベースに作成されます。
構文
ビューを作成するには、次のステートメントを入力してから、クエリを入力します。
CREATE VIEW view_name AS
view_name を置き換えます ビューに使用したい名前を付けます。
例
FruitShop に対して次のコードを実行すると データベース:
CREATE VIEW vFruitInventory AS SELECT Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId;
vFruitInventory というビューが表示されます。 ビュー の下にリストされています ( 更新 をクリックする必要がある場合があります SCHEMAS のボタン 最初のメニュー):
(他のデータベースオブジェクトと同様に)ビューの命名規則を考えて、それに固執することをお勧めします。多くの開発者は、ビュー名の前にv
を付けます 、vw
、v_
またはvw_
これにより、クエリでビューとテーブルを簡単に区別できるようになります。ただし、他の開発者はこの規則に同意せず、テーブル名とビュー名を交換可能にすることを好みます。
ビューのクエリ
これで、テーブルをクエリするのと同じようにビューをクエリできます。
SELECT * FROM vFruitInventory;
結果:
もちろん、より具体的なクエリを使用することもできます。たとえば、これは在庫が10より大きいまたは小さいレコードのみを選択するものです:
SELECT FruitName FROM vFruitInventory WHERE Inventory <= 10;
しかし、できません ビューで参照されていないクエリ列(ビューがクエリする基になるテーブルにある場合でも)。
たとえば、 Fruit にクエリを実行できます。 このようなテーブル:
SELECT * FROM Fruit WHERE FruitId = 1;
ただし、上記の vFruitInventory をクエリすることはできません。 このように表示:
SELECT * FROM vFruitInventory WHERE FruitId = 1;
これは、ビューが FruitId を返さないためです。 桁。ビューで正確な列を指定しましたが、それらがすべて返されます。前述のように、ビューの結果セットはテーブルのようなものであり、「仮想テーブル」と呼ばれることもあります。 「テーブル」にこれらの列が含まれていない場合、それらを照会することはできません。
これは制限ではなく、実際には機能です。 ビューの。この機能は、ユーザーに一部へのアクセスを許可できることを意味します テーブルの列ですが、他の列はありません(ビューを介して)。つまり、ビューがアクセスする基になるテーブルへのアクセスをユーザーに許可せずに、ビューへのアクセスをユーザーに許可できます。一部のテーブルには、ユーザーがアクセスを許可されていない機密情報が格納されている場合があります。ただし、同じテーブルに、必要な機密情報以外の情報も格納されている場合があります。 アクセスするために。何をすべきか?ビューを作成してください!そして、そのビューはそれらのテーブルから機密でない情報のみを選択できます。
ビューの変更
ビューを変更する2つの異なる方法があります。
オプション1:ALTER VIEW
を使用する ステートメント
ALTER VIEW
を使用してビューを変更できます 声明。このように:
ALTER VIEW view_name AS
view_name を置き換えます 変更するビューの名前を指定します。
例
Fruit.FruitId を追加しましょう ビューへのフィールド:
ALTER VIEW vFruitInventory AS SELECT Fruit.FruitId, Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId;
ここで、 FruitId を返そうとすると クエリのフィールドで結果が得られます。
ただし、このフィールドにFruit.FruitId
としてアクセスすることはできないことに注意してください。 。 FruitId
としてのみアクセスできます 。そして、これはそれがどうあるべきかです。結局のところ、ビューは「仮想テーブル」であり、クエリするテーブルの構造を知る必要はありません。
オプション2:CREATE OR REPLACE
を使用する
ALTER VIEW
を実行する前に、ビューが存在している必要があることに注意してください 声明。存在しない場合は、エラーが発生します。 CREATE OR REPLACE
を使用すると、この問題を回避できます。 声明。これにより、ビューが存在しない場合は作成され、存在する場合は置き換えられます。
したがって、上記のビューを次のように作成できます。
CREATE OR REPLACE VIEW vFruitInventory AS SELECT Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId;
次に、同じCREATE OR REPLACE
を使用して更新できます。 ステートメントですが、定義を変更するだけです。たとえば、Fruit.FruitId
を追加します フィールド:
CREATE OR REPLACE VIEW vFruitInventory AS SELECT Fruit.FruitId, Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId;
ビューの削除
DROP VIEW
を使用してビューをドロップします 声明。このように:
DROP VIEW vFruitInventory
上記のステートメントは、 vFruitInventory というビューを削除します 。
複数のビューを削除する
同じDROP VIEW
を使用して複数のビューを削除できます 声明。各ビュー名はコンマで区切ってください。このように:
DROP VIEW view_1, view_2 ...
IF EXISTS
条項
IF EXISTS
を使用することもできます ビューが存在しない場合にエラーが発生しないようにする句:
DROP VIEW IF EXISTS view_1, view_2 ...