【MySQL】ビューの基本操作

【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)