0

我有 2 个程序实例,访问数据库中的 1 个表。
桌子points

game    |  player1  |  player2
--------|-----------|-----------
Poker   |    5      |   
Skat    |    8      |    4
Bridge  |           |   10

如果 player1 使用第一个实例,想要将他的点数(例如 Poker)保存到表中,则必须确定 Poker 是否已经存在。如果没有,扑克将与 player1 的积分一起插入。但是如果 Poker 已被 player2 插入,则只应插入 player1 的点数(仅应更改行)。

我如何确保每种游戏只插入一次,在这种情况下只插入(更改)点?
我认为,专栏game必须是独一无二的。

我的解决方案是首先查询游戏类型并检查行数。如果有0行,插入游戏和积分,如果已经有1行,只插入积分。
但是是否有更好/更快的解决方案,而无需首先查询?

4

4 回答 4

4
INSERT INTO points (game,player1) VALUES ('Poker',5)
    ON DUPLICATE KEY UPDATE player1=5;

有关更多信息,请参阅 MySQL 文档:INSERT ... ON DUPLICATE KEY Syntax

于 2012-04-11T21:28:04.870 回答
0

将您的插入分成两个语句。为此,“游戏”必须是唯一的列 - 也就是说,没有两个值可以相同。

INSERT INTO 'game' VALUES('Poker',null,null);
UPDATE 'game' SET player1='5' WHERE 'game'='POKER';

如果第一行已经存在,它不会影响任何东西,因为唯一约束会阻止它。

于 2012-04-11T21:24:37.790 回答
0

使用替换成语法。请注意,您可以为数据库表创建唯一约束。

在此处阅读有关替换的信息。在此处阅读有关唯一约束的信息。

于 2012-04-11T21:32:10.313 回答
0
 REPLACE INTO points (game,player1) VALUES ('Poker',5);
于 2012-04-11T21:39:17.840 回答