MySQL-在insert满足其他值后,触发更新另一个表中的列

MySQL-在insert满足其他值后,触发更新另一个表中的列,mysql,triggers,sql-update,multiple-tables,Mysql,Triggers,Sql Update,Multiple Tables,第一次发布,请耐心等待: 我有3张表:CWUsers、CWGamesList和CWOwnsGame CWUsers包含用户名和他们通过购买的游戏获得的当前忠诚度点数 CWGamesList包含游戏名称、控制台类型以及用户在购买游戏时将获得的忠诚度点数 CWOwnsGame是一个事务表,它记录用户名、游戏名称和控制台类型 在购买一款游戏后,更新CWUsers表时出现了问题 最初,我在插入CWOwnsGame后有一个触发器,如下所示: UPDATE CWUSERS SET loyaltyPoints

第一次发布,请耐心等待:

我有3张表:CWUsers、CWGamesList和CWOwnsGame

CWUsers包含用户名和他们通过购买的游戏获得的当前忠诚度点数

CWGamesList包含游戏名称、控制台类型以及用户在购买游戏时将获得的忠诚度点数

CWOwnsGame是一个事务表,它记录用户名、游戏名称和控制台类型

在购买一款游戏后,更新CWUsers表时出现了问题

最初,我在插入CWOwnsGame后有一个触发器,如下所示:

UPDATE CWUSERS SET loyaltyPoints = loyaltyPoints +
(SELECT loyaltyPoints FROM CWGameList WHERE gameConsole = "Wii" AND gameName = "Mario")
WHERE username = "bob"
虽然这只适用于一个实例,但您如何使其适用于任何已购买的游戏


感谢在
触发器中,您可以访问正在修改的行的两个版本:
旧的
按原样包含行(如果存在),而
新的
按原样包含行(如果存在)

要使触发器如您所述工作,您需要使用
中的值来调节
子句,如下所示:

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
中的正确列与
cownsgame

中的列具有相同的名称,谢谢您的回复!我来试试:)嗯,我试这个的时候出错了。在NEW中说“未知列‘gameConsole’。这将是
cownsgame
中合适的列。我只是在猜测列名。您猜对了,表中的列名叫做gameConsole。请先仔细检查拼写;然后发布
CREATE table
语句?