翼度科技»论坛 编程开发 mysql 查看内容

触发器

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
触发器

一、介绍

触发器是与表有关的数据库对象,指在insert/update/delete之前或之后,触发并执行触发器中定义SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。
使用别 名OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。
触发器类型NEW 和 OLDINSERT型触发器NEW 表示将要或者已经新增的数据类型UPDATE型触发器OLD 表示修改之前的数据,NEW 表示将要修改或者已经修改后的数据DELETE型触发器OLD 表示将要或者已经删除的数据二、语法


  • 创建
    1. CREATE TRIGGER trigger_name
    2. BEFORE/AFTER INSERT/UPDATE/DELETE
    3. ON tbl_name FOR EACH ROW -- 行级触发器
    4. BEGIN
    5.         trigger_stmt;
    6. END;
    复制代码
  • 查看
    1. SHOW TRIGGERS;
    复制代码
  • 删除
    1. DROP TRIGGER [schema_name.]trigger_name; -- 如果没有指定schema_name,默认为当前数据库。
    复制代码
代码演示:
  1. -- 触发器
  2. -- 准备工作:日志表 user_logs
  3. CREATE TABLE user_logs(
  4.         id INT(11) NOT NULL auto_increment,
  5.        
  6.         operation VARCHAR(20) NOT NULL COMMENT '操作类型,insert/update/delete',
  7.        
  8.         operate_time datetime NOT NULL COMMENT '操作时间',
  9.        
  10.         operate_empno INT(11) NOT NULL COMMENT '操作的empno',
  11.        
  12.         operate_params VARCHAR(1000) COMMENT '操作参数',
  13.        
  14.         PRIMARY KEY(`id`)
  15. )ENGINE=INNODB DEFAULT CHARSET=utf8;
  16. -- 插入数据触发器(insert)
  17. CREATE TRIGGER emp_insert_trigger
  18.         AFTER INSERT ON emp FOR EACH ROW
  19. BEGIN
  20.         INSERT INTO user_logs VALUES(null, 'insert', NOW(), new.empno,  CONCAT('输入的内容:',new.empno,new.ename, new.job, new.mgr,new.hiredate,new.sal,new.comm,new.deptno));
  21. END;
  22.        
  23. -- 查看       
  24. SHOW TRIGGERS;
  25. -- 删除
  26. DROP TRIGGER emp_insert_trigger;
  27. INSERT INTO emp VALUES(7800, 'TIM', 'SALESMAN',7902, '1980-12-15 00:00:00', 900, 1000, 20);
  28. SELECT * FROM user_logs;
  29. -- 修改数据触发器(update)
  30. CREATE TRIGGER emp_update_trigger
  31.         AFTER UPDATE ON emp FOR EACH ROW
  32. BEGIN
  33.         INSERT INTO user_logs VALUES(null, 'update', NOW(), new.empno,  CONCAT('更新之前的数据:','empno=',old.empno,'ename=',old.ename,'job=', old.job, 'mgr=',old.mgr,'hiredate=',old.hiredate,'sal=',old.sal,'comm=',old.comm,'deptno=',old.deptno,
  34. '| 更新之后的数据:','empno=',new.empno,'ename=',new.ename,'job=', new.job, 'mgr=',new.mgr,'hiredate=',new.hiredate,'sal=',new.sal,'comm=',new.comm,'deptno=',new.deptno));
  35. END;
  36. SHOW TRIGGERS;
  37. UPDATE emp SET sal = 1900 WHERE empno = 7800;
  38. UPDATE emp SET sal = 1900 WHERE empno < 7800; -- empno < 7800 的记录有几条,就执行几次触发器
  39. SELECT * FROM user_logs;
  40. -- 删除数据的触发器(delete)
  41. CREATE TRIGGER emp_delete_trigger
  42.         AFTER DELETE ON emp FOR EACH ROW
  43. BEGIN
  44.         INSERT INTO user_logs VALUES(null, 'delete', NOW(), old.empno, CONCAT('删除之前的数据:','empno=',old.empno,'ename=',old.ename,'job=', old.job, 'mgr=',old.mgr,'hiredate=',old.hiredate,'sal=',old.sal,'comm=',old.comm,'deptno=',old.deptno));
  45. END;
  46. SHOW TRIGGERS;
  47. DELETE FROM emp WHERE empno = 7800;
  48. SELECT * FROM user_logs;
复制代码
来源:https://www.cnblogs.com/zh-Note/p/17454984.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具