繁体   English   中英

如果在MySql查询中如何使用此方法?

[英]How do I use this if else in a MySql query?

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

// Assuming that I have variables like these:
// String uid = "ffffffff-ffff-ffff-ffff-ffffffffffff"; // This is a Minecraft UUID.
// int languageID = 1; // This is a simple Integer
ResultSet set = stm.executeQuery("SELECT language FROM players WHERE UUID = '" + uid + "';");
set.beforeFirst();
while (set.next()){
    // This will run if in the table already contains the UUID = the uid.
    stm.execute("UPDATE players SET language = '" + languageID + "' WHERE UUID = '" + uid +"';");
    return;
}
// This will just run if the resultSet is empty.
stm.execute("INSERT INTO players(UUID, language) values('" + uid + "','" + languageID +"')");

我需要将此代码转换为一个mysql查询,以避免服务器中出现LAG,因为每次有人加入我的BungeeCord服务器时,都会执行此代码。 尽管此代码处于异步任务中,但仍可能导致一些问题。

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

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

谢谢。

您要insert . . . on duplicate key update insert . . . on duplicate key update insert . . . on duplicate key update 像这样:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM