如何在MySql查询中使用此项?

时间:2015-12-06 17:24:28

标签: java mysql sql minecraft bukkit

所以,我有下面的代码(在Java中),它使用1个查询来检查表是否包含播放器UUID的寄存器,并且只有在mysql发送结果后它才能决定使用UPDATE或INSERT在另一个查询中。

IF (/* HERE IS THE PROBLEM */) THEN {
   UPDATE players SET ... WHERE ... // update the result
}
ELSE {
  INSERT INTO players ... // insert a new register in the table
}

我需要将此代码转换为一个mysql查询以避免服务器中的LAG,因为每次有人加入我的BungeeCord服务器时都会执行此代码。虽然这段代码是在异步任务中,但它仍然会导致一些问题。

事实是,我不知道如何在sql中使用IF函数来检查表是否包含一个带有Player的UUID的寄存器:

private static final long serialVersionUID = 354054054054L;

感谢。

1 个答案:

答案 0 :(得分:2)

你想要insert . . . on duplicate key update。像这样:

INSERT INTO players(UUID, language)
     VALUES (uid, languageID)
     ON DUPLICATE KEY UPDATE language = VALUES(language);

请注意,即使将IF移动到数据库中(在存储过程中)也不会消除竞争条件。唯一的方法是锁定表以进行更新。但是,你可以在一个声明中完成所有这些,这是最好的方法。

此外,这假设您在表上有唯一索引或主键来标识重复项。