Как мне использовать это, если еще в запросе MySql?
Итак, у меня есть этот код ниже (на 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. Хотя этот код находится в асинхронной задаче, он все же может вызвать некоторые проблемы.
Дело в том, что я не знаю, как использовать функцию IF в sql, чтобы проверить, содержит ли таблица регистр с 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
}
Благодарю.
1 ответ
Ты хочешь insert . . . on duplicate key update
, Что-то вроде этого:
INSERT INTO players(UUID, language)
VALUES (uid, languageID)
ON DUPLICATE KEY UPDATE language = VALUES(language);
Обратите внимание, что даже перемещение IF
в базу данных (в хранимой процедуре) не устраняет состояние гонки. Единственный способ сделать это - заблокировать таблицу для обновления. Но вы можете сделать все это в одном утверждении, так что это лучший подход.
Кроме того, это предполагает, что у вас есть уникальный индекс или первичный ключ в таблице для идентификации дубликатов.