只插入一次

时间:2012-04-11 21:19:54

标签: java mysql

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

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

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

我怎样才能确保每种游戏只插入一次,在这种情况下只插入(改变)点? 我认为,专栏game必须是唯一的。

我的解决方案是首先查询游戏类型并检查行数。如果有0行,则插入游戏和点,如果已经有1行,则只插入点 但是,有没有更好/更快的解决方案,一开始没有查询?

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

将插入符分成两个语句。为了实现这一点,“游戏”必须是一个独特的列 - 也就是说,没有两个值可以相同。

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

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

答案 2 :(得分:0)

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

了解有关替换为here的信息。 阅读有关唯一约束here

答案 3 :(得分:0)

 REPLACE INTO points (game,player1) VALUES ('Poker',5);