触发器定义什么的就不介绍了
这里从定义触发器的语法格式开始
delimiter $
create trigger '触发器名称' after/before insert/update/delete
on '表名' for each row
begin
'触发的sql语句';
end $;
delimiter;
- delimiter:是mysql的分隔符,默认是分号(;),在例如触发器,存储过程这种情况,为了让其顺利的执行先去,就需要先重新定义一个特殊的分隔符,在结束操作后再重新更改回来;
- after/before:触发器被触发的时刻,选择触发器在触发事件之前发生还是触发事件之后发生;
- insert/update/delete:触发事件,在mysql中,只支持这三种操作来触发触发器;
- for each row:行级触发器。指每行受影响,触发器都运行,mysql不支持语句触发器,所以必须写for each row;
示例:
第一步:先创建两个表:
图书馆表
图书表
- 创建插入触发器
-- 插入触发器
delimiter $
create trigger trig_insert_book after insert
on `library` for each row
begin
insert into book(`ref`,`name`,`price`,`press`)
values (new.book_ref,new.book_name,new.book_price,new.book_press);
end $;
delimiter ;
创建完成后,可以从设计表结果中查看
- 执行插入语句
insert into library(`library_id`,`book_ref`,`book_name`,`book_price`,`book_press`,`book_sum`,`library_name`,`library_adress`)
values (11021,'ac1005','春秋',59.9,'小木出版社',60,'广州市图书馆','广州市')
可以看到,现在只对library表进行插入操作,插入成功后,查看library表数据
同时再去才可能book表数据:
可以发现,book的表数据也同步插入
对比触发器的sql语句与结果
(因为这里我的book表的id字段是自增的,所以不需要在触发器中去设置id)
- 创建更新触发器
-- 更新触发器
delimiter $
create trigger trig_update_book after update
on `library` for each row
begin
update book set ref=new.book_ref,name=new.book_name,price=new.book_price,press=new.book_press;
end $
delimiter;
- 执行更新语句
update library set book_name ='冬夏' where library_id=11021
更新结果:
- 创建删除触发器
delimiter $
create trigger trig_delete_book after delete
on `library` for each row
begin
delete from book where ref = old.book_ref;
end $;
delimiter;
- 执行删除语句
delete from `library` where book_ref = 'ac1005'
删除结果:
以上即为mysql触发器的同步表操作
----------------------------------------------------------------------------------------------------------这是一条分割线
本文仅做为本人的学习笔记,不作为参考资料,请慎用
如有出错的地方,欢迎各位大佬点评指正