gpt4 book ai didi

java - 如何在 MySql 查询中使用 if else ?

转载 作者:行者123 更新时间:2023-11-29 07:27:17 25 4
gpt4 key购买 nike

所以,我在下面有这段代码(在Java中),它使用1个查询来检查表是否包含玩家UUID的寄存器,并且只有在mysql发送结果后,它才能决定使用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函数来检查表中是否包含带有Player的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
}

谢谢。

最佳答案

您想要插入。 。 。重复 key 更新。像这样的事情:

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

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

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

关于java - 如何在 MySql 查询中使用 if else ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34120363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com