簡體   English   中英

在UPDATE上使用IF語句的MySQL觸發器

[英]MySQL Trigger with IF statement on UPDATE

我希望創建一個觸發器。

這是我的兩張桌子,

  1. kk_settlements

     | paidBy | paidTo | settlementAmount | createdAt | groupId | 
  2. 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 

我要去哪里錯了? 我想我在觸發器中使用paidBypaidTo時出錯了。 請糾正我。

還建議是否有更好的方法完成同一件事。 我願意征求意見。

嘗試使用NEW.paidBy和NEW.paidTo。

這就是您引用FOR EACH ROW當前行的值的方式。 在UPDATE觸發器中,您可以使用OLD和NEW來引用該字段的上一個值以及該字段被更改為的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM