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

语法
--创建
create trigger 触发器名称
before/after insert/update/delete
on table_name for each row --行级触发器
begin
trigger_stmt;
end;
--查看
show triggers;
--删除
drop triggers [schema_name]触发器名;--如果没有指定schema_name,默认为当前数据库。
例

--先创建好上述user_logs表
create trigger tb_user_insert_trigger
after insert on tb_user for each row
begin
insert into user_logs(...) values
(null,'insert',now(),new.id,concat('插入的内容为id=',new.id,',name=',new.name));
end;
--查看
show triggers;
--删除
drop triggers tb_user_insert_trigger;
--插入数据到tb_user表;
--查看user_logs表
--修改数据触发器
create trigger tb_user_update_trigger
after update on tb_user for each row
begin
insert into user_logs(...) values
(null,'update',now(),new.id,concat('更新之前的数据id=',old.id,',name=',old.name,
' | 更新之后的数据id=',new.id,',name=',new.name));
end;
--更新数据后查看user_logs表
update tb_user set name='张三' where age <= 5;
--问 触发器执行几次 5次,因为是行级触发器
--删除数据触发器
create trigger tb_user_delete_trigger
after delete on tb_user for each row
begin
insert into user_logs(...) values
(null,'delete',now(),old.id,concat('删除之前的内容为id=',new.id,',name=',new.name));
end;
5.总结

触发器是数据库中的一个重要机制,用于在特定的insert、update或delete操作前后执行预定义的SQL语句,以确保数据完整性、记录日志或进行数据验证。本文介绍了MySQL中的行级触发器创建、查看和删除的语法,并通过实例展示了如何创建insert、update和delete触发器,以及这些触发器在数据操作时的行为。
1311

被折叠的 条评论
为什么被折叠?



