触发器
- 关键词:trigger
- 适用于:在表的 插入(insert),更新(update),删除(delete) 操作发生时自动执行的MySQL语句
创建触发器时需给出的信息
- 触发器名
- 在操作前还是操作后触发(after / before)
- 被什么操作触发(insert / update / delete)
- 关联的表
使用出发操作的数据
- insert :可通过new访问被插入的行,形式为(new.字段),before insert 可以更新new中的值(允许更改被插入的值)
- delete:可以通过old访问被删除的行,old中的值是只读的
- update:old访问更新前的值,new访问更新后的值
触发器创建格式如下:
#创建触发器
create trigger 触发器名 before(after) update(insert/delete) on 表名
for each row
begin
触发逻辑
end;
#删除触发器
drop trigger 触发器名;
触发器练习
下面我们来做一个练习来熟悉一下触发器:
需求:给部门表 dept 添加员工数量字段 emp_nub ,使得员工表 emp 在添加员工时对应部门员工数量加1.
我们来逐步分析:
alter table dept add dept_nub int default 0;#在部门表中添加字段
update dept
set dept_nub = (select count(*) from emp where emp.deptno = dept.deptno)
#将已有数据填入到新字段中
#触发器(自动执行)
create trigger mytrigger after insert on emp#创建触发器 在添加一个新员工之后执行
for each row
begin
update dept
set dept_nub = dept_nub + 1 #指令:新字段 部门人数加1
where deptno = new.deptno; #条件:部门编号等于更新的部门编号
end;
insert into emp(empno,deptno) values(666,20); #添加新员工
视图
- 关键字:view
- 概念:有查询结果形成的一个虚拟的表。视图不能索引,也不能有关联的触发器。
作用:
- 重用SQL语句
- 简化查询语句,隐藏复杂的SQL(封装)
#创建视图
create view 视图名 as 查询语句;
#修改视图
alter view 视图名 as 查询语句;
#使用视图查询
select 查询内容 from 视图名;
#删除视图
drop view [if exists] 视图名;
#查看创建视图语句
show create view 视图名;
视图练习
需求:查询员工名,员工的部门名称,员工领导名称,和薪水等级
create view myview as #创建视图
select e1.ename,dname,e2.ename as MGR_name,GRADE from
emp e1 left join emp e2 on e1.MGR = e2.empno #内链接
join dept on e1.deptno = dept.deptno #外连接
join salgrade on e1.sal between salgrade.losal and salgrade.hisal #外连接
order by GRADE;
select * from myview; #用视图查询