MySQL – 在插入满足其他值的位置后触发更新另一个表中的列

本教程将介绍MySQL - 在插入满足其他值的位置后触发更新另一个表中的列的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

MySQL - 在插入满足其他值的位置后触发更新另一个表中的列 教程 第1张

问题描述

第一次发帖,请多多包涵:

我有 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"

虽然这仅适用于一个实例,但您怎么使其适用于任何购买的游戏.

谢谢

推荐答案

row 触发器中,您可以访问正在修改的行的两个版本:OLD 包含 的行(如果存在),NEW 包含该行因为它(它将存在.)

为了使您的触发器按您描述的那样工作,请问使用 NEW 中的值来调节 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 中的列具有相同的名称.

好了关于MySQL - 在插入满足其他值的位置后触发更新另一个表中的列的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。