1、 视图概述
(1)视图的含义
(2)视图的作用
逻辑数据独立性:视图可以帮助用户屏蔽真实表结构变化带来的影响。
2、 创建视图
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH [CASCADED | LOCAL]CHECK OPTION]
CREATE表示创建新的视图;
REPLACE表示替换已经创建的视图;
view_name表示视图的名称;
column_list表示为属性列;
SELECT_statement表示select语句;
WITH [CASCADED | LOCAL]CHECK
OPTION参数表示视图在更新时保证在视图的权限范围之内,CASCADED 为默认值,表示更新视图时要满足所有相关视图和表的条件,LOCAL表示更新视图时满足该视图本身定义的条件即可。
(2)在单表上创建视图
例1:在t表格上创建一个名为view_t的视图
CREATE TABLE t (qty INT, price INT); /*创建基本表t*/
INSERT INTO t VALUES(3, 50); /*插入记录*/
CREATE VIEW view_t AS SELECT quantity, price, quantity *price FROM t; /*创建视图view_t*/
SELECT * FROM view_t;
默认情况下创建的视图和基本表的字段是一样的,也可以通过指定视图字段的名称来创建视图。
例2:在t表格上创建一个名为view_t2的视图
CREATE VIEW view_t2(qty, price, total ) AS SELECT quantity, price, quantity *price FROM t;
SELECT * FROM view_t2;
(3)在多表上创建视图
例1:在表student和表stu_info上创建视图stu_glass
CREATE VIEW stu_glass (id,name, glass) AS SELECT student.s_id,student.name ,stu_info.glass FROM student ,stu_info WHERE student.s_id=stu_info.s_id;
SELECT * FROM stu_glass;
这个视图只包含了id、姓名、班级,id对应student表中的s_id字段,name字段对应student表中的name字段,glass字段对应stu_info表中的glass字段。
3、查看视图
例1:通过DESCRIBE语句查看视图view_t的定义
DESCRIBE view_t;
(2)SHOW TABLE STATUS语句查看视图基本信息
例1:使用SHOW TABLE STATUS命令查看视图信息
SHOW TABLE STATUS LIKE 'view_t' \G;
SHOW TABLE STATUS LIKE 't' \G;
(3)SHOW CREATE VIEW语句查看视图详细信息
例1:SHOW CREATE VIEW查看视图的详细定义
SHOW CREATE VIEW view_t \G;
(4)在views表中查看视图详细信息
SELECT * FROM information_schema.views;
4、 修改视图
修改视图时指修改数据库中存在的视图,当基本表的某些字段发生变化时,可以通过修改视图来保持与基本表的一致性
(1)用CREATE OR REPLACE VIEW语句修改视图
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
和创建视图的语法一样。例1:修改视图view_t
DESC view_t;
CREATE OR REPLACE VIEW view_t AS SELECT * FROM t;
DESC view_t;
(2)ALTER语句修改视图
语法:ALTER [ALGORITHM = {UNDEFINED | MERGE |TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
例1:使用ALTER语句修改视图view_t
DESC view_t;
ALTER VIEW view_t AS SELECT quantity FROM t;
DESC view_t;
5、更新视图
例1:使用UPDATE语句更新视图view_t
SELECT * FROM view_t; /*查看更新之前的视图*/
SELECT * FROM t; /*查看更新之前的表*/
UPDATE view_t SET quantity=5; /*更新视图*/
SELECT * FROM t; /*查看更新之后的表*/
SELECT * FROM view_t; /*查看更新之后的视图*/
对视图view_t更新后,基本表t的内容也更新了,同样当对基本表t更新后,另一个视图view_t2的内容也会更新,可以用SELECT * FROM view_t2;语句查看view_t2视图。
例2:使用INSERT语句在基本表t中插入一条记录
INSERT INTO t VALUES (3,5);
SELECT * FROM t;
SELECT * FROM view_t2;
当向t表插入一条记录时,可以看到其他的内容也跟着更新了
例3:用delete删除视图view_t2中的一条记录
delete from view_t2 where price=5;
select * from view_t2;
select * from t;
在视图view_t2中删除price=5的记录,视图的删除是通过删除基本表中相关的记录实现的。
当视图中包含有如下内容时,视图的更新操作将不能被执行:
A、视图中不包含基本表中被定义为非空的列
B、在定义视图的select语句后的字段列表中使用了数学表达式
C、在定义视图的select语句后的字段列表中使用聚合函数
D、在定义视图的select语句中使用了distinct,union,top,group by或having句子
6、删除视图
view_name[,view_name] ...
[RESTRICT | CASCADE]
例1:删除stu_glass视图
DROP VIEW IF EXISTS stu_glass;
SHOW CREATE VIEW stu_glass;
转载请注明出处:http://blog.youkuaiyun.com/linshuxin111/