语法:
createtrigger 触发器名称
{before |after } {insert|update|delete} -- 触发器类型和事件on 表名称
for each row-- 触发器的作用范围begin-- 触发器执行的操作end;
- 触发器名称可以自定义 ,并唯一性,见名知意
- before / after : 表示触发器的类型,分别表示发生前/发生后执行
- insert / update / delete : 表示触发器的事件类型,分别表示插入 / 更新 / 删除操作
- on 表名称 : 为触发器所在的表名
- for each row : 表示触发器作用的范围,即每一行记录都会触发该触发器
- begin 和 end之间是触发器执行的操作,可以是一条或者多条SQL语句
案例:
-- 创建两张表createtable table1(
id int,
name varchar(20)characterset utf8
)charset= utf8;createtable table2(
id int,
name varchar(20)characterset utf8
)charset= utf8;
-- 创建一个触发器,当向表中插入一条记录时,自动向另一个表中插入一条记录createtrigger insert_trigger_1
afterinserton table1
for each rowbegin-- 触发器的具体事件insertinto table2(id,name)values(NEW.id,New.name);end;
添加数据:
向table1表中添加数据时,会触发insert_trigger_1触发器,自动向table2表中添加数据
insertinto table1(id,name)values(1,'张三'),(2,'李四'),(3,'王五'),(4,'赵六'),(5,'唐七'),(6,'老王');
查询table1表
select*from table1;
查询table2表
select*from table2;
-- 创建一个触发器,当从表中删除一条记录时,自动从另一个表中删除一条记录createtrigger delete_trigger_1
afterdeleteon table1
for each rowbegindeletefrom table2 where id = OLD.id and name = OLD.name;end;
删除数据:
删除table1表中数据时,会触发delete_trigger_1触发器,自动删除table2表中对应的数据
deletefrom table1 where id =5and name ='王五';
查看两张表中的数据
select*from table1;
select*from table2;
-- 创建一个触发器,当向表中更新一条记录时,自动更新另一个表中的记录createtrigger update_trigger_1
afterupdateon table1
for each rowbeginupdate table2 set id = NEW.id, name = NEW.name where id = OLD.id and name = OLD.name;end;
修改数据:
修改table1表中数据时,会触发update_trigger_1触发器,自动更新table2表中对应的数据
update table1 set id =10,name ='小明'where id =6and name ='老王';
select*from table1;
select*from table2;
droptrigger 触发器名称;
触发器的应用场景包括但不限于以下几种:
总结:
触发器的应用场景非常广泛,可以用于强制实施业务规则、记录日志变更、复杂的默认值计算、数据同步以及数据校验等。在创建触发器时,需要指定触发器的名称、触发器所在的表、触发器的触发时机(如insert、update或delete操作)、触发器的执行次数(for each row或for each row statement)以及触发器的逻辑。
提示:请勿发布广告垃圾评论,否则封号处理!!