Deu*_*eit 7 mysql sql-update on-duplicate-key
我有一个包含商店ID和玩家ID的表,以及玩家的积分.我想要做的是将点从一个商店转移到另一个商店,事实是商店ID和玩家ID形成一个独特的索引.我想要做的是重复密钥更新,而不是让它失败,将一个条目的点添加到另一个并删除"from"条目.就像是:
UPDATE `playerspoints`
SET `boardId`=$to
WHERE `boardId`=$from
ON DUPLICATE KEY UPDATE `points`=.... get the idea?
Run Code Online (Sandbox Code Playgroud)
您只能在该ON DUPLICATE KEY区域中一个冲突行的上下文中进行更改。此外,据我所知,这是该INSERT声明的一个属性。
您需要的是一个简单的分类账,您可以在其中记录余额的添加和减少,然后手动或使用触发器将其制成表格。
例如,最简单的方法是:
INSERT INTO points_adjustments (boardId_from, boardId_to, points)
VALUES (?, ?, ?)
Run Code Online (Sandbox Code Playgroud)
这可能更容易表示为一对条目:
INSERT INTO points_adjustments (boardId, points)
VALUES (?, ?)
Run Code Online (Sandbox Code Playgroud)
您可以为 +n 点添加一个条目,为 -n 添加一个匹配的条目。您可以随时使用 获得余额SUM(points)。您可以将其包装在 a 中VIEW以使检索更容易,或者如果您愿意,可以使用触发器将总和非规范化到另一个表的列中。
一个简单的触发器将为每个受影响的发出以下语句boardId:
INSERT INTO balances (boardId, points) VALUES (?, ?)
ON DUPLICATE KEY SET points=points+VALUES(points)
Run Code Online (Sandbox Code Playgroud)
这首先避免了密钥冲突,并提供了所发生交易的可审计记录。
无论如何,要自动完成所有这些操作,您可能必须使用触发器。
来自文档 INSERT ... ON DUPLICATE KEY UPDATE 语句
一般来说,您应该尽量避免在具有多个唯一索引的表上使用 ON DUPLICATE KEY UPDATE 子句。
| 归档时间: |
|
| 查看次数: |
12202 次 |
| 最近记录: |