MySQL - 在插入满足其他值的位置后触发更新另一个 table 中的列
MySQL - Trigger to update Column in another table after insert where it satisfys other values
第一次发帖,多多包涵:
我有 3 个 table:CWUsers、CWGamesList 和 CWOwnsGame。
CWUsers 包含用户名和他们通过购买的游戏获得的当前忠诚点数。
CWGamesList 包含游戏名称、控制台类型和用户在购买游戏时将获得的忠诚点数。
CWOwnsGame 是一个事务table,其中记录了用户名、游戏名称和主机类型。
购买游戏后使用忠诚度积分更新 CWUsers table 时遇到问题。
原来我是这样插入CWOwnsGame后触发的:
UPDATE CWUSERS SET loyaltyPoints = loyaltyPoints +
(SELECT loyaltyPoints FROM CWGameList WHERE gameConsole = "Wii" AND gameName = "Mario")
WHERE username = "bob"
虽然这只适用于一个实例,但您如何让它适用于购买的任何游戏。
谢谢
在 row
触发器中,您可以访问正在修改的行的两个版本:OLD
包含 was 的行(如果存在),NEW
包含 will be 的行(如果它将存在。)
为了使您的触发器按照您的描述工作,您可以使用 NEW
[=33 中的值来调节 WHERE
子句=],像这样:
CREATE TRIGGER update_loyalty_points
AFTER INSERT ON CWUserOwnsGame
FOR EACH ROW
UPDATE CWUsers
SET loyaltyPoints = loyaltyPoints +
(SELECT loyaltyPoints
FROM CWGameList
WHERE gameConsole = NEW.cName
AND gameName = NEW.gName)
WHERE username = NEW.uName;
我假设您已在表之间一致地命名列。请注意 NEW
中的正确列与 CWOwnsGame
.
中的列具有相同的名称
第一次发帖,多多包涵:
我有 3 个 table:CWUsers、CWGamesList 和 CWOwnsGame。
CWUsers 包含用户名和他们通过购买的游戏获得的当前忠诚点数。
CWGamesList 包含游戏名称、控制台类型和用户在购买游戏时将获得的忠诚点数。
CWOwnsGame 是一个事务table,其中记录了用户名、游戏名称和主机类型。
购买游戏后使用忠诚度积分更新 CWUsers table 时遇到问题。
原来我是这样插入CWOwnsGame后触发的:
UPDATE CWUSERS SET loyaltyPoints = loyaltyPoints +
(SELECT loyaltyPoints FROM CWGameList WHERE gameConsole = "Wii" AND gameName = "Mario")
WHERE username = "bob"
虽然这只适用于一个实例,但您如何让它适用于购买的任何游戏。
谢谢
在 row
触发器中,您可以访问正在修改的行的两个版本:OLD
包含 was 的行(如果存在),NEW
包含 will be 的行(如果它将存在。)
为了使您的触发器按照您的描述工作,您可以使用 NEW
[=33 中的值来调节 WHERE
子句=],像这样:
CREATE TRIGGER update_loyalty_points
AFTER INSERT ON CWUserOwnsGame
FOR EACH ROW
UPDATE CWUsers
SET loyaltyPoints = loyaltyPoints +
(SELECT loyaltyPoints
FROM CWGameList
WHERE gameConsole = NEW.cName
AND gameName = NEW.gName)
WHERE username = NEW.uName;
我假设您已在表之间一致地命名列。请注意 NEW
中的正确列与 CWOwnsGame
.