当前位置: 首页> 健康> 养生 > MySQL——触发器(trigger)基本结构

MySQL——触发器(trigger)基本结构

时间:2025/7/14 10:16:30来源:https://blog.csdn.net/bengbeng2345/article/details/139743607 浏览次数:0次


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)基本结构

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: