• MySQL触发器使用指南大全


    一、介绍

    触发器是与表有关的数据库对象,指在insert/update/delete之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。
    使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发(比如说 一条语句影响了 5 行 则会被触发 5 次),不支持语句级触发(比如说 一条语句影响了 5 行 则会被触发 1 次)。

    触发器类型NEW 和 OLD
    INSERTNEW 表示将要或者已经新增的数据
    UPDATEOLD表示修改之前的数据,NEW表示将要或已经修改后的数据
    DELETEOLD表示将要或者已经删除的数据

     

    二、触发器-语法
     

    创建
    CREATE TRIGGER trigger_name

    BEFORE/AFTER INSERT/UPDATE/DELETEON

    tbl_name FOR EACH ROW         --行级触发器BEGIN

    BEGIN

            trigger_stmt ;

    END;

    查看
    SHOW TRIGGERS ;


    删除
    DROP TRIGGER [schema_name]trigger_name; --如果没有指定schema_name,默认为当前数据库。
     

    三、触发器-案例1(insert类型)

    --插入数据触发器如下:
    create trigger tb_user_insert_trigger
    after insert on tb_user for each row

    begin

    insert into user_logs(id, operation,operate_time,operate_id,operate_params)VALUES(null, 'insert ', now(),new.id, concat( '插入的数据内容为: id=' , new.id , ' , name=' ,new.name) );

    end;

    --查看触发器

    SHOW TRIGGERS ;

    --删除触发器

    DROP TRIGGER tb_user_insert_trigger

    四、触发器-案例2(update类型)

    --更新数据触发器如下:
    create trigger tb_user_update_trigger
    after update on tb_user for each row

    begin

    insert into user_logs(id, operation,operate_time,operate_id,operate_params)VALUES(null, 'update ', now(),new.id, concat('更新前的数据: id=' , old.id , ' , name=' ,old.name,'更新后的数据: id=' , new.id , ' , name=' ,new.name) );

    end;

    --查看触发器

    SHOW TRIGGERS ;

    --删除触发器

    DROP TRIGGER tb_user_update_trigger

    五、触发器-案例3(delete类型)

    --删除数据触发器如下:
    create trigger tb_user_delete_trigger
    after deleteon tb_user for each row

    begin

    insert into user_logs(id, operation,operate_time,operate_id,operate_params)VALUES(null, 'delete', now(),old.id, concat('删除前的数据: id=' , old.id , ' , name=' ,old.name) );

    end;

    --查看触发器

    SHOW TRIGGERS ;

    --删除触发器

    DROP TRIGGER tb_user_delete_trigger

    六、触发器总结

    MySQL触发器是在特定表上执行的存储过程,通常在插入、更新和删除数据时触发。触发器允许您在数据库操作前后执行自定义逻辑,例如验证数据的有效性、记录日志或更新其他相关表的数据。

    创建MySQL触发器:

    1. CREATE TRIGGER trigger_name
    2. {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name
    3. FOR EACH ROW
    4. BEGIN
    5. -- 触发器逻辑
    6. END;

    触发器名称:您为触发器指定的唯一名称。
    BEFORE / AFTER:指定触发器在操作之前或之后触发。
    INSERT / UPDATE / DELETE:指定触发器在执行插入、更新或删除操作时触发。
    table_name:触发器所属的表名。
    FOR EACH ROW:表示触发器将为每个受影响的行执行一次。

    在BEGIN和END之间编写触发器的逻辑。可以使用NEW关键字引用插入或更新的新值,使用OLD关键字引用更新或删除的旧值。

    例如,以下示例是一个简单的触发器案例:

    在每次插入新行到"orders"表时,自动更新"last_update"列为当前时间:

    1. CREATE TRIGGER update_last_update
    2. AFTER INSERT ON orders
    3. FOR EACH ROW
    4. BEGIN
    5. UPDATE orders
    6. SET last_update = NOW()
    7. WHERE id = NEW.id;
    8. END;

    这只是一个简单的示例,实际上可以编写更复杂的触发器逻辑来满足您的需求。

  • 相关阅读:
    使用vite和vue-i18n,实现部署后更新多语言功能
    PyTorch:计算图
    面了个腾讯30k+出来的,他让我见识到什么是基础的天花板
    i.MX 8M Plus-集成专用神经处理引擎(NPU)
    信号与线性系统分析(吴大正,郭宝龙)(信号的分类)
    小程序制作(超详解!!!)第十四节 计时器
    MySQL小白之redo log
    2核2G3M带宽服务器腾讯云和阿里云价格、性能对比
    30天Python入门(第十七天:深入了解Python中的异常处理)
    如何理解低位交叉编址的公式T+(m-1)r
  • 原文地址:https://blog.csdn.net/weixin_55772633/article/details/132779764