MySQL 在 UPDATE 时使用 IF 语句触发

MySQL Trigger with IF statement on UPDATE

我想创建一个触发器。

这是我的两个 table,

  1. kk_settlements table

    | paidBy | paidTo | settlementAmount | createdAt | groupId |
    
  2. kk_user_relations table

    | userId | userId_1 | groupId | amount |
    

现在当 kk_settlements 上有一个 INSERT 我想创建触发器和 UPDATE kk_user_relations table.

在执行 UPDATE 之前,我想检查 paidBy 是小于还是大于 paidTo,并根据它找到 kk_user_relations 中的行 table 这是要更新的。 (因为 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 来引用字段的前一个值和它正在更改的值。