[英]MySQL Trigger with IF statement on UPDATE
我希望創建一個觸發器。
這是我的兩張桌子,
kk_settlements
表
| paidBy | paidTo | settlementAmount | createdAt | groupId |
kk_user_relations
表
| userId | userId_1 | groupId | amount |
現在,當在kk_settlements
上有一個INSERT
,我想創建觸發器並UPDATE
kk_user_relations
表。
在執行UPDATE
之前,我想檢查paidBy
是否小於或大於paidTo
並基於該值在kk_user_relations
表中找到要更新的行。 (由於kk_user_relations
中的所有行都由userId
< userId_1
存儲
我嘗試添加以下trigger
(我正在使用phpmyadmin)
IF (paidBy < paidTo)
THEN
UPDATE kk_user_relations
SET kk_user_relations.amount = kk_user_relations.amount + settlementAmount
WHERE kk_user_relations.userId = paidBy
AND kk_user_relations.userId_1 = paidTo
AND kk_user_relations.groupId = groupId;
ELSE
UPDATE kk_user_relations
SET kk_user_relations.amount = kk_user_relations.amount + settlementAmount
WHERE kk_user_relations.userId_1 = paidBy
AND kk_user_relations.userId = paidTo
AND kk_user_relations.groupId = groupId;
END IF
該trigger
不起作用,並引發錯誤。
#1054 - Unknown column 'paidBy' in 'field list'
phpmyadmin生成的完整trigger
是
DROP TRIGGER IF EXISTS `kk_update_user_relations`;
CREATE DEFINER=`root`@`localhost` TRIGGER `kk_update_user_relations`
AFTER INSERT ON `kk_settlements`
FOR EACH ROW
IF (paidBy < paidTo) THEN
UPDATE kk_user_relations
SET kk_user_relations.amount = kk_user_relations.amount + settlementAmount
WHERE kk_user_relations.userId = paidBy
AND kk_user_relations.userId_1 = paidTo
AND kk_user_relations.groupId = groupId;
ELSE UPDATE kk_user_relations
SET kk_user_relations.amount = kk_user_relations.amount + settlementAmount
WHERE kk_user_relations.userId_1 = paidBy
AND kk_user_relations.userId = paidTo
AND kk_user_relations.groupId = groupId;
END IF
我要去哪里錯了? 我想我在觸發器中使用paidBy
和paidTo
時出錯了。 請糾正我。
還建議是否有更好的方法完成同一件事。 我願意征求意見。
嘗試使用NEW.paidBy和NEW.paidTo。
這就是您引用FOR EACH ROW當前行的值的方式。 在UPDATE觸發器中,您可以使用OLD和NEW來引用該字段的上一個值以及該字段被更改為的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.