触发器概念
触发器是一种与表相关联的一段代码,它会在特定事件(INSERT、UPDATE和DELETE语句)发生时自动执行。触发器可以在数据表中插入或更新数据的时候自动执行存储过程,从而实现约束、默认值或处理业务逻辑的功能。
触发器可以在MySQL中创建和删除,已经创建的触发器可以修改它的定义。每个触发器都有一个触发事件和响应事件,触发事件通常是数据表上的INSERT、UPDATE或DELETE语句,响应事件是在触发事件后MySQL服务器执行的操作。
触发器语法
create trigger 触发器名称
{before|after} {insert|update|delete}-- 触发器类型{发生前|发生后} 触发器事件{新增|修改|删除}
on 表名称
for each row -- 触发器作用范围
begin
-- 触发器执行操作
end;
-
触发器名称可以自定义 ,并唯一性,见名知意
-
before / after : 表示触发器的类型,分别表示发生前/发生后执行
-
insert / update / delete : 表示触发器的事件类型,分别表示插入 / 更新 / 删除操作
-
on 表名称 : 为触发器所在的表名
-
for each row : 表示触发器作用的范围,即每一行记录都会触发该触发器
-
begin 和 end之间是触发器执行的操作,可以是一条或者多条SQL语句
insert | update | delete | |
OLD | 修改之前的值 | 删除之前的值 | |
NEW | 插入的值 | 修改之后的值 |
触发器-insert
-- 创建一个触发器,当向表中插入一条记录时,自动向另一个表中插入一条记录
create trigger insert_trigger_1
after insert on table1
for each row --监控所有行
begin
-- 触发器的具体事件
insert into table2(id,name) values (NEW.id,New.name);
end;
触发器-update
-- 创建一个触发器,当向表中更新一条记录时,自动更新另一个表中的记录
create trigger update_trigger_1
after update on table1
for each row --监控所有行
begin
update table2 set id = NEW.id, name = NEW.name where id = OLD.id and name = OLD.name;
end;
触发器-delete
-- 删除触发器
drop trigger 触发器名称;
查询触发器
-- 查询所有触发器
SHOW TRIGGERS;
-- 查询某个触发器
SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_NAME = '触发器名'
-- 按数据库查询所有的触发器
SELECT * FROM information_schema.TRIGGERS(WHERE TRIGGER_SCHEMA = '数据库名')