如何在 MySql 查询中使用 if else?
How do I use this if else in a MySql query?
所以,我在下面有这段代码(在 Java 中),它使用 1 个查询来检查 table 是否包含播放器 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 函数来检查 table 是否包含播放器 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 INTO players(UUID, language)
VALUES (uid, languageID)
ON DUPLICATE KEY UPDATE language = VALUES(language);
请注意,即使将 IF
移动到数据库中(在存储过程中)也不会消除竞争条件。唯一的方法是锁定 table 以进行更新。但是,您可以在一个语句中完成所有这些,因此这是最好的方法。
此外,这假设您在 table 上有唯一索引或主键来识别重复项。
所以,我在下面有这段代码(在 Java 中),它使用 1 个查询来检查 table 是否包含播放器 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 函数来检查 table 是否包含播放器 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 INTO players(UUID, language)
VALUES (uid, languageID)
ON DUPLICATE KEY UPDATE language = VALUES(language);
请注意,即使将 IF
移动到数据库中(在存储过程中)也不会消除竞争条件。唯一的方法是锁定 table 以进行更新。但是,您可以在一个语句中完成所有这些,因此这是最好的方法。
此外,这假设您在 table 上有唯一索引或主键来识别重复项。