Здравствуйте.
У меня есть таблица в MySQL и в ней постоянно возникает ошибка `Deadlock found when trying to get lock; try restarting transaction`.
var sql = "CREATE TABLE IF NOT EXISTS @table ("
sql += "`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,"
sql += "`user_id` bigint(20) UNSIGNED NOT NULL,"
sql += "`peer_id` bigint(20) UNSIGNED NOT NULL,"
sql += "`sender_id` bigint(20) UNSIGNED NOT NULL,"
sql += "`time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,"
sql += "`status` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',"
sql += "`seen` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',"
sql += "PRIMARY KEY (id)"
sql += ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;"
Также в таблице есть индексы:
var sql = "ALTER TABLE @table "
sql += "ADD KEY `@table_user_id` (`user_id`),"
sql += "ADD UNIQUE KEY `@table_user_peer_sender` (`user_id`, `peer_id`, `sender_id`),"
sql += "ADD KEY `@table_sender_id` (`sender_id`),"
sql += "ADD KEY `@table_time` (`time`),"
sql += "ADD KEY `@table_status` (`status`),"
sql += "ADD KEY `@table_seen` (`seen`);"
Ошибка возникает во время выполнения именно UPDATE запроса:
UPDATE common_likes SET `seen` = '1' WHERE user_id = '79773' AND status = '2' AND sender_id != '79773';
В таблице выполняются в основном 3 типа запросов: SELECT, INSERT, UPDATE.
INSERT добавляет запись в таблицу с значением `seen` = '0', а UPDATE устанавливает `seen` = '1' . Также выполняються запросы для обновления поля status, но там дедлоки не возникают.
Я не использую транзации, но судя по всему MySQL выполняет каждый запрос в отдельной транзакции.
Подскажите, пожалуйста, как исправить эту ошибку.
Спасибо.