视图
- 虚拟表,和普通的表一样使用。
- 行列数据来自定义视图的查询中使用的表,是使用时动态生成的,只保存sql逻辑,不保存查询结果,具有临时性。
(类似一键查询,封装)
创建视图
语法:
create view 视图名
as
查询语句;
例:查询邮箱包含a的员工名,部门名,工种id
CREATE VIEW v1
AS
SELECT last_name,department_name,job_id
FROM employees e
INNER JOIN departments d ON e.department_id=d.department_id
WHERE email LIKE'%a%';
使用视图
例:使用上述视图,从中找出名字包含a的信息
SELECT * FROM v1 WHERE last_name LIKE '%a%';
- 由上述操作可以得到启发,以前需要通过连接,嵌套查询等方法完成的操作,现在可以通过视图完成
例:查询各部门平均工资级别
#创建视图查询各个部门平均工资
CREATE VIEW v2
AS
SELECT AVG(salary) ag, department_id
FROM employees
GROUP BY department_id;
#使用并查询平均工资级别
SELECT grade_level, department_id
FROM job_grades j
JOIN v2 v
ON v.`ag` BETWEEN j.`lowest_sal` AND j.`highest_sal`;
修改视图
语法:
#方式一
create or replace view 视图名
as
查询语句;
#方式二
alter view 视图名
as
查询语句;
删除视图
语法(可以删除多个):
drop view 视图名, 视图名,...;
查看视图
#方法一
DESC 视图名;
#方法二
SHOW CREATE VIEW 视图名;
更新视图
对于视图的数据更新和对普通表的操作基本上一样。
- 插入——insert
- 修改——update
- 删除——delete
注意:
- 与修改区别,此处是修改视图中的数据,上面的修改视图是修改sql语句。
- 一般不对视图数据做修改
- 视图的可更新性和视图中查询的定义有关系。具备以下特点的视图不允许更新(not updatable):
包含分组函数,distinct,group by,having,union;
常量视图(即查询的是某个常量);
select包含子查询;
使用了连接查询;
查询from一个不能更新的视图;
where子句的子查询引用了from子句中的表
级联删除
级联删除的作用在于,当两个表以外键相连接时,如果删除主表某一行信息,会影响到从表,导致无法进行删除的问题。但是如果加上了级联删除的限制,在删除主表信息时,从表中与该行相关的信息也会被删除,如:删除专业信息表中的数学专业,则学生表中的数学专业的学生信息都会被删除。
语法:在外键命令后添加on delete cascade
constraint 外键名 foreign key(列名) references 主表(列名) on delete cascade;
级联置空
加上级联置空的限制,在删除主表信息时,从表中与该行相关的信息也会被设为null,如:删除专业信息表中的数学专业,则学生表中的数学专业的学生其专业信息都会被设为null。
语法:在外键命令后添加on delete set null
constraint 外键名 foreign key(列名) references 主表(列名) on delete set null;