MySQL触发器使用指南大全

一、介绍

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

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

二、触发器-语法
 

创建
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触发器:

CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name
FOR EACH ROW
BEGIN
    -- 触发器逻辑
END;

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

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

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

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

CREATE TRIGGER update_last_update
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
    UPDATE orders
    SET last_update = NOW()
    WHERE id = NEW.id;
END;

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

猜你喜欢

转载自blog.csdn.net/weixin_55772633/article/details/132779764
今日推荐