ビュー MySQLでは、他のテーブルに格納されているデータを表示するためにトリガーできる名前付きクエリです。つまり、ビューはユーザー定義の仮想テーブルです。ビューは次の目的で使用できます:
- データベースのセキュリティを強化します。 データベースに保護が必要な機密情報が含まれている場合は、ビューを使用するとデータを分離するのに役立ちます。ビューは事前定義された結果セットを使用して作成でき、機密情報を含むテーブルではなく、そのビューへのアクセスのみをユーザーに許可できます。
- 複雑なビジネスロジックをデータベースサーバーに移動します。 開発者は、頻繁に使用するソフトウェアロジックをさまざまなクライアントでコーディングする代わりに、ビューを使用してロジックをデータベースレベルに移動できます。たとえば、ビューを作成して、総売上に応じて顧客の分類を表示できます。
- データの気を散らすものを減らします。 ビューは、異なるテーブルからの結果を組み合わせて、呼び出されたときにのみ関連する列を表示できます。
このガイドでは、次のことを学びます。
- MySQLビューの構文はどのように構成されていますか。
- MySQLビューを作成する方法。
- MySQLビューを呼び出す方法。
- MySQLでビューをドロップする方法。
始める前に
このガイドに従うには、次のものがあることを確認してください。
-
MySQLソフトウェアを実行するLinode。 『Linode入門ガイド』に従って、Linodeをプロビジョニングできます。
-
LinodeにインストールされているMySQLサーバーソフトウェア(またはMariaDB)。いくつかのLinuxディストリビューションにMySQLをインストールする方法を説明するガイドが含まれているMySQLセクションを参照してください。
データベースの準備
MySQLビューを作成する前に、サンプルデータベースを作成し、いくつかのテーブルを定義して、最初にいくつかのデータを入力します。
-
LinodeにSSHで接続します。次に、次のコマンドを入力して、rootユーザーとしてMySQLにログインします。
mysql -u root -p
プロンプトが表示されたら、MySQLサーバーのrootパスワードを入力し、 Enterを押します。 続行します。
注 パスワードが受け入れられない場合は、
sudo
を使用して前のコマンドを実行する必要がある場合があります :sudo mysql -u root -p
-
パスワードが受け入れられると、MySQLプロンプトが表示されます:
mysql >
注 MariaDBを使用している場合は、代わりに次のようなプロンプトが表示される場合があります。
MariaDB [(none)]>
-
次に、このSQLコマンドを実行して、
sample_database
という名前のサンプルデータベースを作成します。 :CREATE DATABASE sample_database;
データベースが正常に作成されたことを確認する次の出力が表示されます。
Query OK, 1 row affected (0.02 sec)
-
sample_database
を選択します データベース:USE sample_database;
次の出力が表示されます:
Database changed
-
このコマンドを実行して、
customers
を作成します テーブル:CREATE TABLE customers ( customer_id BIGINT PRIMARY KEY AUTO_INCREMENT, customer_name VARCHAR(50) ) ENGINE = InnoDB;
次の出力が表示されます:
Query OK, 0 rows affected (0.07 sec)
-
次に、
customers
にデータを入力します 3つのレコードを持つテーブル。以下のINSERT
を実行します コマンドを1つずつ:INSERT INTO customers (customer_name) VALUES ('Leslie'); INSERT INTO customers (customer_name) VALUES ('Andy'); INSERT INTO customers (customer_name) VALUES ('Ben');
以下の出力は、各レコードが挿入された後に表示されます。
Query OK, 1 row affected (0.08 sec) ...
-
この
SELECT
を実行して、サンプルレコードがデータベースに挿入されたことを確認します コマンド:SELECT * FROM customers;
この出力が表示され、前の手順でデータが正常に挿入されたことを確認します。
+-------------+---------------+ | customer_id | customer_name | +-------------+---------------+ | 1 | Leslie | | 2 | Andy | | 3 | Ben | +-------------+---------------+ 3 rows in set (0.01 sec)
-
次に、
sales
を作成します テーブル。次のコマンドを実行します:CREATE TABLE sales ( customer_id BIGINT PRIMARY KEY AUTO_INCREMENT, monthly_sales DECIMAL(17,2) ) ENGINE = InnoDB;
この出力が表示されます:
Query OK, 0 rows affected (0.07 sec)
-
次に、
sales
にデータを追加します テーブル。これらのコマンドを1つずつ実行します:INSERT INTO sales (customer_id, monthly_sales) VALUES ('1','500.27'); INSERT INTO sales (customer_id, monthly_sales) VALUES ('2','7600.32'); INSERT INTO sales (customer_id, monthly_sales) VALUES ('3', '25879.63');
各販売レコードを挿入すると、次の出力が表示されます:
Query OK, 1 row affected (0.01 sec) ...
-
次に、
SELECT
を実行します 売上データがテーブルに挿入されたことを確認するためのクエリ:SELECT * FROM sales;
この出力が表示され、前の手順で販売データが正常に挿入されたことを確認します。
+-------------+---------------+ | customer_id | monthly_sales | +-------------+---------------+ | 1 | 500.27 | | 2 | 7600.32 | | 3 | 25879.63 | +-------------+---------------+ 3 rows in set (0.00 sec)
作業するデータベースとテーブルを定義しました。次のセクションでは、MySQLビューの構文について説明します。
MySQLビュー構文
これは、MySQLビュー構文の簡略化されたバージョンです:
CREATE
VIEW view_name
AS select_statement
-
view_name
:MySQLビューの名前はここで定義する必要があります。後でビューの機能を思い出せるように、わかりやすい名前を使用することをお勧めします。 -
select_statement
:これは、定義されたビューと結合されたSQLクエリです。ビューが呼び出されると、MySQLはこのクエリを実行してレコードセットを返します。
MySQLビューの作成
このセクションでは、MySQLビューの例を示します。このビューは、月間売上高に応じて、サンプルデータベースから顧客を分類するために使用されます。
MySQLサーバーにログインしていることを確認してください。次に、以下のコマンドを実行してcustomers_membership
を作成します ビュー:
CREATE
VIEW customers_membership
AS SELECT sales.customer_id,
customer_name,
(IF(sales.monthly_sales >= 5000, 'PREMIUM', 'BASIC')) as membership
FROM sales
LEFT JOIN customers
ON sales.customer_id = customers.customer_id;
ビューが正常に作成されると、次のような出力が表示されます。
Query OK, 0 rows affected (0.01 sec)
上記のMySQLコマンドは、customers_membership
という名前のビューを作成します customers
に参加します およびsales
PRIMARY KEY
を含むテーブル customer_id
。論理的なIF(expression, value_if_true, value_if_false)
ステートメントロジックは、月間売上から顧客のメンバーシップを決定するために使用されます:
-
顧客の売上が5,000以上の場合、ビューは顧客を
PREMIUM
として分類します。 メンバー。 -
それ以外の場合(売上が
5,000
未満の場合 )、顧客はBASIC
として分類されます メンバー。
customers_membership
これで、ビューがデータベースに保存されます。次のセクションでは、ベーステーブルに直接クエリを実行せずにMySQLビューを呼び出してレコードセットを表示する方法を示します。
MySQLビューの呼び出し
このセクションでは、上記で作成したMySQLビューを呼び出して、期待どおりに機能することを確認する方法を示します。ビューが作成されると、データベースオブジェクトとして表示され、SELECT
を使用して呼び出すことができます。 ステートメント。
-
customers_membership
を呼び出すには 表示、実行:SELECT * FROM customers_membership;
ビューが期待どおりに機能している場合は、生成された
membership
を持つ顧客のリストが表示されます。 売上に基づく値。Leslie
以降 の売上は5000(500.27)を下回り、ビューは顧客のメンバーシップをBASIC
として出力します。 。Andy
およびBen
の売上はそれぞれ7600.32と25879.63であり、これによりPREMIUM
メンバー:+-------------+---------------+------------+ | customer_id | customer_name | membership | +-------------+---------------+------------+ | 1 | Leslie | BASIC | | 2 | Andy | PREMIUM | | 3 | Ben | PREMIUM | +-------------+---------------+------------+ 3 rows in set (0.00 sec)
-
ベーステーブルデータが更新され、MySQLビューを再度呼び出すと、最新の情報が表示されます。ビューはベーステーブルから情報を取得し、データを保存しません。ビューがベーステーブルから更新された情報を取得する方法を示すために、
Rajie
という名前の別の顧客を追加しますcustomers
へ テーブル:INSERT INTO customers (customer_name) VALUES ('Rajie');
この出力が表示されます:
Query OK, 1 row affected (0.01 sec)
-
次に、顧客の月次売上情報を売上テーブルに追加します。
INSERT INTO sales (customer_id, monthly_sales) VALUES ('4', '147.41');
この出力が表示されます:
Query OK, 1 row affected (0.01 sec)
-
次に、
customers_membership
を呼び出します もう一度見る:SELECT * FROM customers_membership;
以下の出力が表示されます。これは、ビューが変更を取得し、新しい顧客の情報を期待どおりに取得できることを確認します。
+-------------+---------------+------------+ | customer_id | customer_name | membership | +-------------+---------------+------------+ | 1 | Leslie | BASIC | | 2 | Andy | PREMIUM | | 3 | Ben | PREMIUM | | 4 | Rajie | BASIC | +-------------+---------------+------------+ 4 rows in set (0.00 sec)
上記のビューレコードセットでわかるように、
Rajie
という名前の新しい顧客ができました。BASIC
を使用 メンバーシップ。
MySQLビューの削除
他のデータベースオブジェクトと同様に、ビューが不要になった場合は削除できます。これは、MySQLビューを削除するための基本的な構文です:
DROP VIEW IF EXISTS view_name;
-
MySQLビューを削除する前に、まず以下のコマンドを実行してその名前を特定します。
SHOW FULL TABLES WHERE TABLE_TYPE LIKE 'VIEW';
現在選択されているデータベース内のすべてのビューのリストが表示されます:
+---------------------------+------------+ | Tables_in_sample_database | Table_type | +---------------------------+------------+ | customers_membership | VIEW | +---------------------------+------------+ 1 row in set (0.01 sec)
-
この場合、ドロップするビューの名前は
customers_membership
です。 。したがって、削除するには、次のコマンドを実行します:DROP VIEW IF EXISTS customers_membership;
ビューがデータベースから削除された後、以下の出力が表示されることを確認してください。
Query OK, 0 rows affected (0.01 sec)
注 IF EXISTS
を使用せずに存在しないMySQLビューを削除しようとすると、注意してください キーワード、MySQLはエラーをスローします。 -
手順1のコマンドを再度実行すると、結果は表示されないはずです。
SHOW FULL TABLES WHERE TABLE_TYPE LIKE 'VIEW';
Empty set (0.000 sec)
詳細情報
このトピックの詳細については、次のリソースを参照してください。これらは有用であることを期待して提供されていますが、外部でホストされている資料の正確性や適時性を保証することはできません。
- MySQL-ビューの使用