E5 触发器的定义和应用

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 TRIGGER tr_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 TRIGGER tr_upd_dept AFTER UPDATE
    ON emp 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 ON emp 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;

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值