mysql触发器中包含select语句问题
作者:某科学的南条
这篇文章主要介绍了mysql触发器中包含select语句问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
mysql触发器中包含select语句
在mysql的触发器中,如果直接写select * from d_shop_ware 会报错
Not allowed to return a result set from a trigger
查找原因是
MYSQL5以后,不允许触发器返回任何结果,因此使用into @变量名,将结果赋值到变量中,用select调用即可
如下sql语句,
@flag_price_copy就可以进行值的判断
select b.flag_price into @flag_price_copy from `dst_111yao_doms`.`d_shop_ware` as a,`dst_111yao_doms`.`d_platform` as b where a.pfid = b.pfid and a.olshopid = NEW.olshopid and a.tfid = NEW.pfid and a.warecode = NEW.outter_id and a.skuid = NEW.sku;
if @flag_price_copy = '1' then ...
mysql触发器中通过SELECT语句给局部变量赋值
一条赋值变量引发的巨坑,自己备注一下,浪费了不少时间。
这边关键字,我都用了大写,方便观看。
好久之前记录的了,现优化了格式,更方便阅读
新增的实例
CREATE TRIGGER num_in AFTER INSERT ON user_t FOR EACH ROW BEGIN --变量的声明 DECLARE num INT(11) ; --赋值 SET num = (SELECT COUNT(id) FROM user_t) ; UPDATE count_table SET count_num = num , update_time = SYSDATE() WHERE table_name = "user_t" ; END ;
删除的实例
CREATE TRIGGER account_delete_info AFTER DELETE ON sys_account_info FOR EACH ROW BEGIN DECLARE deleteid INT(11) ; -- 保险起见 SET deleteid = 0 ; -- 直接获取不到,得先存一下 这是个小坑 SET deleteid = OLD.id ; -- 保险起见 ,确保在获得值的时候删除 IF deleteid != 0 THEN DELETE from sys_user_info where sys_user_info.account_id = deleteid ; END IF ; END ;
删除触发器
DROP TRIGGER account_delete_info ;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。