如題:mysql更新觸發器先插入另一張表然后洗掉該條資料
drop trigger if exists trigger_tb_carparkinoutrecord_update;
CREATE TRIGGER trigger_tb_carparkinoutrecord_update AFTER UPDATE ON tb_carparkinoutrecord
FOR EACH ROW
BEGIN
IF @disable_trigger IS NULL THEN
IF new.ProcessingType not in ('未處理主記錄','未處理輔記錄') THEN
INSERT INTO tb_carparkinoutrecord_history SELECT temp_tb_carparkinoutrecord.*,
(CASE WHEN ( isnull(b.CarOwnerName) OR (b.CarOwnerName = '')) THEN '臨時車' ELSE b.CarOwnerName END ) AS CarOwnerName
,( CASE WHEN ( isnull(c.GroupName) OR (c.GroupName = '') ) THEN ' ' ELSE c.GroupName END ) AS GroupName,
(SELECT GetParentGroupName (b.CarGroupGuid) AS Expr1) AS FullGroupName
FROM
( SELECT * FROM tb_carparkinoutrecord as a where a.guid = new.guid) as temp_tb_carparkinoutrecord
LEFT JOIN tb_carinfo as b on ((temp_tb_carparkinoutrecord.InCarNO = b.CarNo) AND (temp_tb_carparkinoutrecord.CarColor = b.CarColor))
LEFT JOIN tb_cargroup as c on (b.CarGroupGuid = c.guid);
IF ROW_COUNT()>0 THEN
DELETE FROM tb_carparkinoutrecord WHERE guid = new.guid;
END IF;
END IF;
SET @disable_trigger = NULL;
END IF;
END
洗掉資料時會報錯,報錯內容:Can't update table 'tb_carparkinoutrecord' in stored function/trigger because it is already used by statement which invoked this stored function/trigger
請問這個應該怎么處理,我把洗掉陳述句放在tb_carparkinoutrecord_history表的插入觸發器中也不行。在線等。。
uj5u.com熱心網友回復:
如果你在觸發器里面對剛剛插入的資料進行了 insert/update, 則出現這個問題。因為會造成回圈的呼叫.可以另外創建程序完成需求
uj5u.com熱心網友回復:
我是在update時觸發的,觸發內容是把update的資料插入另一張表,然后洗掉該條資料
uj5u.com熱心網友回復:
if 里添加@disable_trigger=1,在執行程序中不再執行這個觸發器uj5u.com熱心網友回復:
msyql 應該不支持,你觸發器中洗掉的表是觸發器所在的表uj5u.com熱心網友回復:
觸發器 只能用在一張表上面嗎?
uj5u.com熱心網友回復:
你這個需求不太好實作呀。我剛才測驗(MYSQL 5.7),設定@disable_trigger=1,沒用,根本沒這個引數。
我想通過CALL 存盤程序做洗掉,發現還是報一樣的錯誤。
可能這些操作在觸發器里都是一個事務完成的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/75193.html
標籤:MySQL
