簡體   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