【发布时间】:2018-04-05 23:03:49
【问题描述】:
我想创建一个触发器。
这是我的两张桌子,
-
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来引用字段的前一个值以及它正在更改为的值。 -
@Uueerdo 感谢您的快速回复!我用
NEW来引用paidBy和paidTo的值,现在可以了!非常感谢您的评论! :)
标签: mysql phpmyadmin