Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql触发器包含select语句

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 ;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文