MySQL之视图操作
视图
什么是视图
视图就是一条select语句执行后返回的结果集,所以我们在创建视图的时候,主要的工作就是在创建这条select语句上。
视图的特性
视图是对若干张基本表的引用,是一张虚表,查询语句执行的结果,不存储具体的数据(基本表发生了改变,视图也会跟着被改变)
和基本表一样,也可以增删改查操作(但是增删改操作会有一定的条件限定)
视图的作用
方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性
更加安全,数据库授权命令不能限制到特定的行和特定的列,但是通过合理的创建视图,可以把权限限定到行级和列级
使用的场合
权限控制的时候,不希望用户访问表中的某些含敏感信息的列,比如salary...
关键信息来源于多个复杂关联表,可以创建视图提取我们需要的信息、简化操作。
视图操作--创建视图&查询数据
注意:在创建视图的时候要注意,mysql视图不支持创建子查询,所以再用子查询的时候,要将其拆开使用
--查到所有平均分数大于60分,并且为男性的学生的名字--SELECT student.sname as name,student.gender as sex, A.avg as avg FROM(--SELECT score.student_id as id, AVG(score.num) as avg FROM score GROUP BY score.student_id HAVING AVG(score.num) > 60--) AS A--LEFT JOIN student on student.sid = A.id WHERE student.gender = '男';--建立一个视图, 这个是失败的,因为mysql视图中不支持子查询的功能--CREATE VIEW v1 as(--SELECT student.sname as name,student.gender as sex, A.avg as avg FROM(--SELECT score.student_id as id, AVG(score.num) as avg FROM score GROUP BY score.student_id HAVING AVG(score.num) > 60--) AS A--LEFT JOIN student on student.sid = A.id WHERE student.gender = '男'--)
--分开分别建立视图一和视图二--CREATE VIEW v1 AS--SELECT score.student_id as id, AVG(score.num) as avg FROM score GROUP BY score.student_id HAVING AVG(score.num) > 60--CREATE view v2 AS--SELECT student.sname as name,student.gender as sex, v.avg a