Mysql

触发器

含义:对一个表进行操作( insert,delete, update)时就会激活它执行里面特定的语句

  数据库存在用户表和日志表,当用户表数据增加、删除、修改的时候,日志表要进行记录。我们可以在写这个业务逻辑的时候在后台代码里面加入。但如果对mysql写了特定的触发器,在我增加一条记录的时候,会自动将存入数据到日志表。

-- 当用户删除users表数据的时候,会自动向日志加入 'name is delete on date
-- DELIMITER是分隔符
DELIMITER $
    CREATE TRIGGER user_log_de BEFORE DELETE on users for each row
    BEGIN
        DECLARE de VARCHAR(20)character set utf8;
        DECLARE delte_time VARCHAR(20) character set utf8;
        DECLARE rs VARCHAR(80) character set utf8;
        Set de = "is delete on ";
        Set delte_time=CURRENT_TIMESTAMP;
        Set rs = CONCAT(OLD.name,de,delte_time);
        insert into logs(log) VALUES(rs);
    END $
DELIMITER;
触发器常见命令格式
  • 创建触发器

    --创建触发器
    CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 -- 触发事件分insert update delete
    ON 表名 
    FOR EACH ROW -- 每行受影响,触发器都执行,叫行级触发器。
    BEGIN
    执行语句列表
    END
  • 触发器DELIMITER的使用

    -- 触发器的分行是‘;’,因为mysql是用‘;’作为结束符,发生冲突,可以使用DELIMITER
    DELIMITER $  #将语句的分隔符改为$
    BEGIN
        sql1;
        sql2;
        ...
        sqln
    END $
    DELIMITER ;  #将语句的分隔符改回原来的分号";"
  • NEW和OLD的使用

    NEW.columnname:新增行的某列数据
    OLD.columnname:修改/删除行的某列数据
    在触发器begin/end里面,可以获得该列的数据

— 定义变量

DECLARE var_name var_type [DEFAULT value] #定义变量,可指定默认值
SET var_name = value  #给变量赋值

总结

版权声明:本文为augusduan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/augusduan/p/9183451.html