目录
一、创建视图
1.1 在单表上创建视图
1.2 在多表上创建视图
二、查看视图
2.1 使用DESCRIBE语句查看视图基本信息
2.2 使用SHOW TABLE STATUS语句查看视图基本信息
2.3 使用SHOW CREATE VIEW语句查看视图详细信息
2.4 在views表中查看视图详细信息
三、修改视图
3.1 使用CREATE OR REPLACE VIEW语句修改视图
3.2 使用ALTER语句修改视图
四、更新视图
五、删除视图
数据库中的视图是一个虚拟表。同真实的表一样,视图包含一系列带有名称的行和列数据。行和列数据来自由定义视图查询所引用的表,并且在引用视图时动态生成。
MySQL可以在单个数据表上创建视图。
CREATE VIEW view_t AS SELECT quantity,price,quantity*price FROM t;
默认情况下创建的视图和基本表的字段是一样的,也可以通过指定视图字段的名称来创建视图。
CREATE VIEW view_t2 (qty,price,total) AS SELECT quantity,price,quantity*price FROM t;
MySQL也可以在两个或者两个以上的表上创建视图,可以使用CREATE VIEW语句实现。
CREATE VIEW stu_glass (id,name,glass) AS SELECT student.s_id,student.name,stu_info.glass FROM student,stu_infp WHERE student.s_id=stu_info.s_id;
查看视图是查看数据库中已存在的视图的定义。查看视图必须要有SHOW VIEW的权限,MySQL数据库下的user表中保存着这个信息。查看视图的方法有DESCRIBE、SHOW TABLE STATUS和SHOW CREATE VIEW。
DESCRIBE(DESC)可以用来查看视图,具体的语法如下:
DESCRIBE/DESC 视图名;
查看视图的信息可以通过SHOW TABLE STATUS的方法完成,具体的语法如下:
SHOW TABLE STATUS LIKE '视图名';
例:
SHOW TABLE STATUS LIKE 'view_t' \G
使用SHOW CREATE VIEW语句可以查看视图详细定义,语法如下:
SHOW CREATE VIEW 视图名;
例:
SHOW CREATE VIEW view_t \G
在MySQL中,information_schema数据库下的views表中存储了所有视图的定义。通过对views表的查询,可以查看数据库中所有视图的详细信息,查询语句如下:
SELECT * FROM information_schema.views;
例:
SELECT * FROM information_schema.views \G
修改视图是指修改数据库中存在的视图,当基本表的某些字段发生变化时,可以通过修改视图来保持与基本表的一致性。MySQL中通过CREATE OR REPLACE VIEW语句和ALTER语句来修改视图。
例:修改视图view_t,代码如下:
CREATE OR REPLACE VIEW view_t AS SELECT * FROM t;
例:使用ALTER语句修改视图view_t,代码如下:
ALTER VIEW view_t AS SELECT quantity FROM t;
更新视图是指通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟表,其中没有数据。通过视图更新的时候都是转到基本表上进行更新的,如果对视图增加或者删除记录,实际上是对基本表增加或者删除记录。
视图更新有3种方法:INSERT、UPDATE和DELETE。
例:使用UPDATE语句更新视图view_t,代码如下:
UPDATE view_t SET quantity=5;
对视图view_t更新后,基本表t的内容也会更新,同样当对基本表t更新后,另外一个视图view_t2中的内容也会更新。
例:使用DELETE语句删除视图view_t2中的一条记录,代码如下:
DELETE FROM view_t2 WHERE price=5;
当视图包含有如下内容时,视图的更新操作将不能被执行:
(1)视图中不包含基本表被定义为非空的列。
(2)在定义视图的SELECT语句后的字段列表中使用了数学表达式。
(3)在定义视图的SELECT语句后的字段列表中使用了聚合函数。
(4)在定义视图的SELECT语句中使用了DISTINCT、UNION、TOP、GROUP BY或HAVING子句。
当视图不再需要时,可以将其删除。删除一个或多个视图可以使用DROP VIEW语句。
删除视图必须拥有DROP权限。
例:删除stu_glass视图,代码如下:
DROP VIEW IF EXISTS stu_glass;