Как правильно сделать запрос

214
21 декабря 2017, 23:27

Есть таблица:

CREATE TABLE IF NOT EXISTS `TABLE_KITS_LOG` (
    `FIELD_SERVER_ID` varchar(64) COLLATE utf8_unicode_ci,
    `FIELD_PLAYER` varchar(64) COLLATE utf8_unicode_ci,
    `FIELD_KIT_NAME` varchar(64) COLLATE utf8_unicode_ci,
    `FIELD_TIMESTAMP` int NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Допустим в этой таблице есть запись.

INSERT INTO `TABLE_KITS_LOG` (FIELD_SERVER_ID, 
                              FIELD_PLAYER, 
                              FIELD_KIT_NAME, 
                              FIELD_TIMESTAMP) 
                      VALUES ("server_id", 
                              "name", 
                              "kit", 
                              11111)

Как правильно сделать запрос на обновление записи выше? Подобную задачу я ранее решал с помощью ON DUPLICATE KEY UPDATE но на данный момент у меня нет уникального ключа. Как можно решить данную задачу?

Запись будет обновляться по FIELD_SERVER_ID, FIELD_PLAYER, FIELD_KIT_NAME, а значение, которое будет обновляться FIELD_TIMESTAMP. Проблема в том, что я не знаю заранее, существует ли запись в бд или нет(для её обновления).

Answer 1

В описанных условиях решение одним запросом невозможно - все версии запросов с двойным типом действия (REPLACE, INSERT .. ODKU) требуют наличия уникального индекса.

Я бы решил задачу безусловным удалением записи и последующей вставкой новой записи. Т.е.

DELETE FROM `TABLE_KITS_LOG` 
WHERE (FIELD_SERVER_ID, FIELD_PLAYER, FIELD_KIT_NAME) 
   IN ("server_id",     "name",       "kit");
INSERT INTO `TABLE_KITS_LOG` (FIELD_SERVER_ID, 
                              FIELD_PLAYER, 
                              FIELD_KIT_NAME, 
                              FIELD_TIMESTAMP) 
                      VALUES ("server_id", 
                              "name", 
                              "kit", 
                              2222);
READ ALSO
MySql No database selected в VB.NET с запросом SHOW FULL COLUMNS

MySql No database selected в VB.NET с запросом SHOW FULL COLUMNS

Имеем такой код получения полей из таблицы в базе данных

208
Нужно сделать проггу по C# [требует правки]

Нужно сделать проггу по C# [требует правки]

Известно, что в целочисленном массиве X=(x1,x2,

197
Что такое BindingSource

Что такое BindingSource

Не могу понять, что такое BindingSourceЧерез адаптеры мы можем манипулировать данные

168