创建视图是指在已经存在的数据库表上建立视图。视图可以建立在一张表中,也可以建立在多张表中。
一. 查看用户是否具有创建视图的权限
创建视图需要具有 CREATE VIEW 的权限,同时应该具有查询涉及的列的 SELECT 权限。可以使用 SELECT 语句来查询这些权限信息,查询语法如下:
SELECT Select_priv, Create_view_priv FROM mysql.user WHERE user='用户名';
Select_priv 属性表示用户是否具有 SELECT 权限,Y 表示拥有 SELECT 权限,N 表示没有。Create_view_priv 属性表示用户是否具有 CREATE VIEW权限; mysql.user 表示 MySQL 数据库下面的 user 表。
"用户名" 参数表示要查询是否拥有 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 }]VIEW view_name [( column_list )]
AS SELECT_statement
[ 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。
1. 在单表上创建视图
【例】在 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 | +------+-------+-------+
2. 在多表上创建视图
【例】在表 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 | +------+----------+--------+