zoukankan      html  css  js  c++  java
  • MySQL学习笔记(12):触发器

    本文更新于2019-06-23,使用MySQL 5.7,操作系统为Deepin 15.4。

    SQL语句

    为了便于描述,此处将创建触发器的DDL复述一次,其已于“SQL”章节描述。

    CREATE TRIGGER triggername BEFORE|AFTER INSERT|UPDATE|DELETE
    ON tablename FOR EACH ROW
    statement_list
    

    在statement_list中使用别名OLDNEW来引用触发器中发生变化的旧记录和新记录内容。目前触发器只支持行级触发,不支持语句级触发。

    触发器是行触发的,按照BEFORE触发器、行操作、AFTER触发器的顺序执行,任何一步出错都不会继续执行余下操作。如果是事务表,则会整个作为一个事务回滚。对INSERT INTO ... ON DUPLICATE KEY UPDATE ...语句,若有重复主键的记录需进行UPDATE,触发顺序为BEFORE INSERTBEFORE UPDATEAFTER UPDATE;若没有重复主键的记录直接INSERT,触发顺序为BEFORE INSERTAFTER INSERT

    statement_list可以通过存储过程或函数的OUTINOUT参数将数据返回触发器,但不能调用直接RETURNS的函数。也不能显式或隐式开始或结束事务,如START TRANSACTIONCOMMITROLLBACK

    示例

    DELIMITER ;;
    
    CREATE TRIGGER trigger_test BEFORE UPDATE
    ON t FOR EACH ROW
    BEGIN
    	INSERT INTO history(old_id, old_value, new_id, new_value) VALUES (OLD.id, OLD.value, NEW.id, NEW.value);
    END;;
    
    DELIMITER ;
    
  • 相关阅读:
    与数学有关的几个猜成语
    tex 字体斜体设置
    Beamer中左边画图, 右边文字解释
    Beamer制作索引
    唐诗
    大学生数学竞赛试题荟萃2018-11-06更新
    浙江省2018年高等数学竞赛工科类试题
    读书笔记
    word中中文保持正体,英文用斜体的方法.
    山果(转载《人民日报》)
  • 原文地址:https://www.cnblogs.com/garvenc/p/mysql_learning_12_trigger.html
Copyright © 2011-2022 走看看