视图
View Overview(含义,应用场景)
- 含义:虚拟表,和普通表一样使用。mysql5.1版本出现的新特性,是通过表动态生成的数据。只保存了sql逻辑,不保存查询结果。比如:舞蹈班级和普通班级的对比。
- 应用场景:多个地方用到同样的查询结果;该查询结果使用的sql语句较复杂
- 栗子
# 查询姓zhang的学生名和专业名 SELECT stuname, majorname FROM stuinfo s INNER JOIN major m ON s.`majorid`=m.`id` WHERE s.`stuname` LIKE 'zhang%'; # 比如以上语句的join部分我经常使用,我就封装成view CREATE VIEW v1 AS SELECT stuname, majorname FROM stuinfo s INNER JOIN major m ON s.`majorid`=m.`id` # 再次使用这个语句只需要 SELECT * FROM v1 WHERE stuname LIKE 'zhang%';
- 视图的好处
- 提高了sql重用性
- 简化复杂的sql操作,不必知道它的查询细节
- 保护数据,提高安全性
1. 创建视图View
- 语法:
CREATE VIEW 视图名 AS 查询语句;
- 栗子:看Overview部分
2. 修改视图
- 方式一:
CREATE OR REPLACE VIEW 视图名 AS 查询语句;
- 方式二:
ALTER VIEW 视图名 AS 查询语句
3. 删除View
- 语法:
DROP VIEW 视图名,视图名;
4. 查看视图
- 查看field之类,
DESC myv3;
- 查看完整语句,在sql客户端:
SHOW CREATE VIEW myv3;
- 在命令行查看:
SHOW CREATE VIEW myv3[\G]; \G格式
5. 视图的更新
视图一般用于查询,而不是用于更新!
一般不更新视图里面的语句。
1. 插入
- 会对原始表生成更新,不止view更新!
INSERT INTO myv1 VALUES('zhangfei', 1000);
2. 更改
UPDATE myv1 SET xx=yy;
3. delete
DELETE FROM myv1 WHERE last_name = 'zhangfei';
4. 不允许更新的view
常量视图:CREATE OR REPLACE VIEW myv2 AS SELECT 'john' NAME;
where子句的子查询引用了from子句中的表:employees表在FROM和子查询也有