MySQL不支持触发器返回结果集

文章介绍了MySQL中的INSERT触发器,特别是在AFTERINSERT事件中如何使用NEW虚拟表获取新生成的订单号。BEFOREINSERT常用于数据验证,而AFTERINSERT则用于在数据插入后执行操作,如获取自动生成的订单号。由于MySQL5以后不支持触发器返回结果集,所以需要使用变量来接收结果。
摘要由CSDN通过智能技术生成

– INSERT 触发器
– INSERT触发器在INSERT语句执行之前或之后执行。
需要知道以下几点:
 在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行;
 在BEFORE INSERT触发器中, NEW中的值也可以被更新(允许更改被插入的值);
 对于AUTO_INCREMENT列, NEW在INSERT执行之前包含0,在INSERT执行之后包含新的自动生成值。
一个实际有用的例子:

-- CREATE TRIGGER neworder AFTER INSERT ON orders FOR EACH ROW SELECT NEW.order_num INTO @P;

– 此代码创建一个名为neworder的触发器,它按照AFTER INSERTON orders执行。在插入一个新订单到orders表时, MySQL生成一个新订单号并保存到order_num中。触发器从NEW. order_num取得这个值并返回它。此触发器必须按照AFTER INSERT执行,因为在BEFOREINSERT语句执行之前,新order_num还没有生成。对于orders的每次插入使用这个触发器将总是返回新的订单号。

因为从MySQL5以后不支持触发器返回结果集,需要用一个变量接收结果集输出,所以在插入语句后面加上这条SELECT @p,即可输出之前定义的触发器@p变量的结果集。如下:

-- insert INTO orders(order_date, cust_id) VALUES(NOW(), 10001);
-- select @p;

– BEFORE或AFTER? 通常,将BEFORE用于数据验证和净化(目的是保证插入表中的数据确实是需要的数据)。本提示也适用于UPDATE触发器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小老弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值