【MySQL】ビューの基本操作
MySQLのビューの基本操作を解説します。
ビュー
ビューは仮想テーブルです。
SELECTクエリで定義し、通常のテーブルのように使うことができます。
作成(CREATE VIEW
)
ビューの作成はCREATE VIEW
を使います。
基本構文
CREATE VIEW ビュー名 (カラム名, ...) AS SELECTクエリ
サンプル
mysql> SELECT * FROM items;
+----+-----------+-------+-------+------+
| id | name | price | stock | code |
+----+-----------+-------+-------+------+
| 1 | Apple | 200 | 10 | S001 |
| 2 | Orange | 150 | 3 | S001 |
| 3 | Pineapple | 1100 | 3 | S002 |
| 4 | Grapes | 3500 | 1 | S002 |
+----+-----------+-------+-------+------+
4 rows in set (0.00 sec)
mysql> CREATE VIEW fruits ( id, name, unit_price )
-> AS SELECT id, name, price FROM items;
Query OK, 0 rows affected (0.00 sec)
ビュー名の後の丸括弧(()
)を省略した場合、SELECTクエリのカラム名をそのまま使用します。
データ取得(SELECT
)
ビューのデータ取得はテーブルと同様にSELECT
を使います。
基本構文
SELECT カラム FROM ビュー名
サンプル
mysql> SELECT * FROM fruits;
+----+-----------+------------+
| id | name | unit_price |
+----+-----------+------------+
| 1 | Apple | 200 |
| 2 | Orange | 150 |
| 3 | Pineapple | 1100 |
| 4 | Grapes | 3500 |
+----+-----------+------------+
4 rows in set (0.01 sec)
ビューはSELECTクエリの定義のため、クエリ内のテーブル変更の影響を受けます。
mysql> INSERT INTO items ( name, price, stock ) VALUE ( 'lemon', 80, 30 );
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM fruits;
+----+-----------+------------+
| id | name | unit_price |
+----+-----------+------------+
| 1 | Apple | 200 |
| 2 | Orange | 150 |
| 3 | Pineapple | 1100 |
| 4 | Grapes | 3500 |
| 5 | lemon | 80 |
+----+-----------+------------+
5 rows in set (0.00 sec)
一覧表示(SHOW TABLE
)
ビューの一覧表示はテーブルと同様にSHOW TABLES
を使います。
mysql> SHOW TABLES;
+-------------------+
| Tables_in_mydb |
+-------------------+
| fruits |
| items |
+-------------------+
2 rows in set (0.00 sec)
ただし、この情報から各テーブルがビューであるかどうかを判断することはできません。
情報表示
ビューの情報や作成時クエリを表示できます。
情報(DESC
)
情報(ビュー構造)の表示はDESC
文を使います
基本構文
DESC ビュー名
サンプル
mysql> DESC fruits;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id | int | NO | | 0 | |
| name | varchar(20) | YES | | NULL | |
| unit_price | int | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
作成時クエリ(SHOW CREATE VIEW
)
作成時クエリの表示はSHOW CREATE VIEW
文を使います。
基本構文
SHOW CREATE VIEW ビュー名
サンプル
mysql> SHOW CREATE VIEW fruits;
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View | Create View | character_set_client | collation_connection |
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| fruits | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `fruits` (`id`,`name`,`unit_price`) AS select `items`.`id` AS `id`,`items`.`name` AS `name`,`items`.`price` AS `price` from `items` | utf8mb4 | utf8mb4_0900_ai_ci |
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
1 row in set (0.01 sec)
また、SHOW CREATE TABLE
文でも同様の表示が可能です。
mysql> SHOW CREATE TABLE fruits;
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View | Create View | character_set_client | collation_connection |
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| fruits | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `fruits` (`id`,`name`,`unit_price`) AS select `items`.`id` AS `id`,`items`.`name` AS `name`,`items`.`price` AS `price` from `items` | utf8mb4 | utf8mb4_0900_ai_ci |
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
1 row in set (0.00 sec)
変更(ALTER VIEW
)
ビューの変更はALTER VIEW
を使います。
基本構文
ALTER VIEW ビュー名 ( カラム名, ... ) AS SELECTクエリ
サンプル
mysql> ALTER VIEW fruits ( id, name, price ) AS SELECT id, name, price FROM items;
Query OK, 0 rows affected (0.00 sec)
mysql> DESC fruits;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | NO | | 0 | |
| name | varchar(20) | YES | | NULL | |
| price | int | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
削除(DROP VIEW
)
ビューの削除はDROP VIEW
を使います。
基本構文
DROP VIEW ビュー名
サンプル
mysql> SHOW TABLES;
+-------------------+
| Tables_in_mydb |
+-------------------+
| fruits |
| items |
+-------------------+
2 rows in set (0.00 sec)
mysql> DROP VIEW fruits;
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW TABLES;
+-------------------+
| Tables_in_mydb |
+-------------------+
| items |
+-------------------+
1 rows in set (0.00 sec)