E5 触发器的定义和应用
-
使用MySQL触发器的定义和应用。
-
问题1:创建触发器:当从emp表中删除一些记录时,将删除的记录写入员工历史表(首先创建历史表)。
CREATE TABLE emp_his AS SELECT * FROM EMP WHERE 1=2; CREATE OR
REPLACE TRIGGER tr_del_emp after DELETE – Specifies the trigger
time to trigger the delete operation ON scott.emp FOR EACH ROW
– Description created is a row level trigger BEGIN – insert the modified data to the log record table del_emp, for supervision
INSERT INTO emp_his(deptno , empno, ename , job ,mgr , sal , comm ,
hiredate )
VALUES( old.deptno, old.empno, old.ename , old.job,old.mgr, old.sal, old.comm, old.hiredate); END DELETE FROM emp WHERE empno=2; -
问题2:设计一个行触发器:当DEPT表中deptno列的值被更新时,EMP表中相应的deptno值也被修改。
CREATE DEFINER=
root
@localhost
TRIGGERtr_upd_emp
AFTER UPDATE ON
dept
FOR EACH ROW //创建触发器 BEGIN if new.deptno<>old.deptno then
update emp set deptno=new.deptno where
deptno=old.deptno;//当修改的dept.deptno值与原值不同时,更新emp.deptno的值。 end if; END
update dept set deptno=6 where deptno=3; -
问题3:设计一个行触发器用于emp表的更新,当修改员工的工资sal时候触发更新所在部门的工资总和(首先在dept表中添加一个sumsalary coulmn)。
CREATE DEFINER=
root
@localhost
TRIGGERtr_upd_dept
AFTER UPDATE
ONemp
FOR EACH ROW //创建触发器 BEGIN update dept set sumsalary=(select
sum(sal) from emp where deptno=new.deptno) where deptno=new.deptno;
//当deptno的值=修改的值的deptno时,计算查询到的sal。将结果赋值给sumsalary即可。END update emp set sal=3000 where empno=3;
-
问题4:创建触发器:当emp表中删除一些记录时,将每个员工所在部门的最新人数写入dept表(首先向dept表添加一个person coulmn)。
CREATE TRIGGER
emp_after_delete
AFTER DELETE ONemp
FOR EACH ROW
BEGIN update dept set persons=(select count(*) from emp where
deptno=old.deptno) where deptno=old.deptno; END delete from emp where
empno=3;