@serious911

MySQL Deadlock found?

Здравствуйте.

У меня есть таблица в 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 выполняет каждый запрос в отдельной транзакции.

Подскажите, пожалуйста, как исправить эту ошибку.

Спасибо.
  • Вопрос задан
  • 107 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы