创建视图是指在已经存在的数据库表上建立视图。视图可以建立在一张表中,也可以建立在多张表中。
创建视图需要具有 CREATE VIEW 的权限,同时应该具有查询涉及的列的 SELECT 权限。可以使用 SELECT 语句来查询这些权限信息,查询语法如下:
SELECT Select_priv, Create_view_priv FROM mysql.user WHERE user='用户名';
Select_priv 属性表示用户是否具有 SELECT 权限,Y 表示拥有 SELECT 权限,N 表示没有。"用户名" 参数表示要查询是否拥有 DROP 权限的用户,该参数需要用单引号引起来。
mysql> SELECT Select_priv, Create_view_priv FROM mysql.user WHERE user='root';
+-------------+------------------+
| Select_priv | Create_view_priv |
+-------------+------------------+
| Y | Y |
+-------------+------------------+
语法如下:
CREATE [ALGORITHM={ UNDEFINED | MERGE | TEMPTABLE }][ WITH | [ CASCADED | LOCAL ] CHECK OPTION];
ALGORITHM 是可选参数,表示视图选择的算法。ALGORTHIM参数的取值有3个,分别是UNDEFINED、MERGE和TEMPTABLE。UNDEFINED 表示 MySQL 将自动选择算法M;MERGE 表示将使用的视图语句与视图定义合并,使得视图定义的某一部分取代语句对应的部分; TEMPTABLE 表示将视图的结果存入临时表,然后用临时表来执行语句。
view_name 参数表示要创建的视图名称。
column_list 是可选参数,指定视图中各个属性的名词,默认情况下与 SELECT 语句中查询的属性相同。
SELECT_statement 参数是个完整的查询语句,表示从某个表中查出某些满足条件的记录,将这些记录导入视图中。
WITH CHECK OPTION 是可选参数,表示更新视图时要保证在该视图的权限范围之内。 CASCADED 与 LOCAL 为可选参数,CASCADED 为默认值。表示更新视图时要满足所有相关视图和表的条件;LOCAL 表示更新视图时满足该视图本身定义的条件即可。
视图属于数据库。在默认情况下,将在当前数据库中创建新视图。要想在给定数据库中明确创建视图,创建时应将视图名称设置为 db_name.view_name。
【例】在 t 表格上创建一个名为 view_t 的视图。
创建基本表并插入数据,SQL语句如下:
1
mysql> CREATE TABLE t (quantity INT, price INT);
Query OK, 0 rows affected (0.56 sec)
mysql> INSERT INTO t VALUES (3, 50);
Query OK, 1 row affected (0.07 sec)
创建视图,SQL语句如下:
mysql> CREATE VIEW view_t AS SELECT quantity, price, quantity *price FROM t;
Query OK, 0 rows affected (0.91 sec)
查看执行结果:
mysql> SELECT * FROM view_t;
+----------+-------+-----------------+
| quantity | price | quantity *price |
+----------+-------+-----------------+
| 3 | 50 | 150 |
+----------+-------+-----------------+
也可通过指定视图字段名称来创建视图。
【例】在 t 表格上创建一个名为 view_t2 的视图。
创建视图,SQL语句如下:
mysql> CREATE VIEW view_t2(qty,price,total) AS SELECT quantity, price, quantity *price FROM t;
Query OK, 0 rows affected (0.04 sec)
查看执行结果:
mysql> SELECT * FROM view_t2;
+------+-------+-------+
| qty | price | total |
+------+-------+-------+
| 3 | 50 | 150 |
+------+-------+-------+
【例】在表 student 和表 stu_info 上创建视图 stu_glass。
首先创建如下的表:
mysql> select * from student;
+------+----------+
| s_id | name |
+------+----------+
| 1 | wanglin1 |
| 2 | gaoli |
| 3 | zhanghai |
+------+----------+
mysql> select * from stu_info;
+------+--------+----------+
| s_id | glass | addr |
+------+--------+----------+
| 1 | wuban | henan |
| 2 | liuban | hebei |
| 3 | qiban | shandong |
+------+--------+----------+
创建视图 stu_glass, SQL语句如下:
mysql> SELECT * from stu_glass;
+------+----------+--------+
| id | name | glass |
+------+----------+--------+
| 1 | wanglin1 | wuban |
| 2 | gaoli | liuban |
| 3 | zhanghai | qiban |
+------+----------+--------+
【注】参考于清华大学出版社《MySQL数据库应用案例课堂》2016年1月第1版