字节流的博客

MySQL 触发器

1. 创建触发器

触发器只能创建在永久表上,不能创建在临时表上

  • 语法
    1
    2
    3
    4
    CREATE TRIGGER trigger_name trigger_time trigger_event 
    ON table_name
    FOR EACH ROW
    trigger_statement
  • 实例1

    1
    2
    3
    4
    5
    6
    7
    delimiter $$
    DROP TRIGGER IF EXISTS uf ;
    CREATE TRIGGER uf BEFORE DELETE ON usr
    FOR EACH ROW
    BEGIN
    INSERT INTO home (addr) VALUES('nanjing 1 road') ;
    END ;
  • 实例2

    1
    2
    3
    4
    5
    6
    7
    8
    9
    delimiter $$
    DROP TRIGGER IF EXISTS uf ;
    CREATE TRIGGER uf BEFORE INSERT ON usr
    FOR EACH ROW
    BEGIN
    IF new.salary IS NULL THEN
    SET new.salary = 1000;
    END IF ;
    END;
  • OLD && NEW

    • 对于 INSERT 只有 NEW 是合法的;
    • 对于 DELETE 只有 OLD 是合法的;
    • 对于 UPDATE 操作 OLDNEW 均合法;
  • FOR EACH ROW:表示任何一条记录上的操作满足触发事件都会触发该触发器;

2. 删除触发器

命令:DROP TRIGGER trigger_name

3. 查看触发器

命令:SHOW TRIGGERS

4. 限制

  • 触发程序中不能返回数据,也不能采用CALL语句的动态SQL语句;
  • 在触发器中不能显示或隐式的开始或结束事务;
  • 执行过程中出现任何错误将不会继续执行;
  • 如果执行一个事务表,出现错误后整个被回滚;
  • 如果执行一个非事务表,出现错误后已更新的记录无法被回滚;
Thanks! 😊