mysql觸發(fā)器中包含select語句問題
mysql觸發(fā)器中包含select語句
在mysql的觸發(fā)器中,如果直接寫select * from d_shop_ware 會報錯
Not allowed to return a result set from a trigger
查找原因是
MYSQL5以后,不允許觸發(fā)器返回任何結(jié)果,因此使用into @變量名,將結(jié)果賦值到變量中,用select調(diào)用即可
如下sql語句,
@flag_price_copy就可以進(jìn)行值的判斷
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觸發(fā)器中通過SELECT語句給局部變量賦值
一條賦值變量引發(fā)的巨坑,自己備注一下,浪費(fèi)了不少時間。
這邊關(guān)鍵字,我都用了大寫,方便觀看。
好久之前記錄的了,現(xiàn)優(yōu)化了格式,更方便閱讀
新增的實(shí)例
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 ;
刪除的實(shí)例
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 ;
刪除觸發(fā)器
DROP TRIGGER account_delete_info ;
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL(基于GTID方式)實(shí)現(xiàn)主從復(fù)制和單主復(fù)制詳細(xì)教程
在分布式數(shù)據(jù)庫系統(tǒng)中,主從復(fù)制是實(shí)現(xiàn)高可用性和數(shù)據(jù)冗余的重要手段,基于GTID的復(fù)制模式可以提供更強(qiáng)的復(fù)制一致性和簡化故障轉(zhuǎn)移過程,本文將詳細(xì)介紹如何配置單主復(fù)制的GTID模式,以便在MySQL數(shù)據(jù)庫中實(shí)現(xiàn)穩(wěn)定可靠的數(shù)據(jù)復(fù)制,需要的朋友可以參考下2024-07-07
mysql中datetime類型設(shè)置默認(rèn)值方法
下面小編就為大家分享一篇mysql中datetime類型設(shè)置默認(rèn)值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02

