本文主要是介绍MySQL——触发器(trigger)基本结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、修改分隔符符号
delimiter $$
$$可以修改
2、创建触发器函数名称
create trigger 函数名
3、什么样在操作触发,操作哪个表
after :……之后触发
before :……之后触发
insert :……之后触发
update :……之后触发
delete :……之后触发
on 表名
实例
after insert on user
4、for each row 声明每次触发都被执行
5、 开始触发器代码
begin
6、 触发器触发后执行代码块
7、 结束触发器
end ;
8、 修改分隔符
$$
delimiter ;
delimiter $$ -- 分隔符
create trigger after_inster_user -- 创建触发器的名称
after insert on `user` -- 用户表执行插入操作之后被出发的触发器
for each row -- 每行数据都要进行触发
begin#insert into `user` values(0,'散兵','password88','sanbing@qq.com','1234567890','2024-06-17 22:07:39'); #能添加但执行插入语句时报错1442 - Can't update table 'user' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.#1. MYSQL中触发器中不能对本表进行 insert ,update ,delete操作,以免递归循环触发#2. 对于update 只能用set进行操作,insert与delete只能借助第二张表才能实现需求,如果可以最好用存储过程代替触发器 -- 执行代码块INSERT INTO user_wallet (user_id, balance) -- 在user_wallet表中插入一行数据VALUES (NEW.user_id, 0.00); -- 使用NEW.user_id作为新插入行的user_id,balance为0.00
end ;
$$
delimiter ; -- 结束$$的有效性更换成;
delimiter $$
create trigger after_insert_user
after insert on `user`
for each row
beginsignal sqlstate '45000' set massage_text = '我们人为的停止了数据commit'; # signal sqlstate '45000' 代表错误,会停止操作,包含插入语句也会取消commit操作
end;
$$
delimiter $$
delete from `user` where user_id=5;
# 报错,删除用户前需要删除从表的数据。
delimiter $$
create trigger delete_info_user
before delete on `user`
for each row
begindelete from user_wallet where user_id=old.user_id;delete from user_wallet_log where user_id=old.user_id;
end;
$$
delimiter ;delete from `user` where user_id=5;
#成功
这篇关于MySQL——触发器(trigger)基本结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!