InnoDb deadlock. Как исправить?

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

Уже несколько дней подряд сражаюсь с проблемой deadlock'a. И никак не могу найти альтернативу. Дело в том, что ловлю оной на запросе вида INSERT .. SELECT.

Весь запрос выглядит примерно так:

INSERT INTO `items` (quantity) VALUES(SELECT count(*) FROM `items`)


Так извращаться пришлось потому что, значение quantity -- зависит от счетчика row из этой-же таблицы. И если разделить этот запрос на два (отдельно взять посчитанные row и отдельно записать - стыкаюсь с проблемой того что этот COUNT неправильный, и бывают случаи когда база отдает одно и тоже значение дважды).

В случае с запросом, который я продемонстрировал выше -- все отлично работает. Но есть одно НО которое я и хочу пофиксать. Иногда, вылетает ошибка (40001 - 1213 - Deadlock found when trying to get lock; try restarting transaction)
Транзакции не помогают. Застопорился и не могу найти решение.

Заранее спасибо за ответы.
  • Вопрос задан
  • 1038 просмотров
Пригласить эксперта
Ответы на вопрос 2
@pihel
Sql, Oracle, pl/sql, BI, ETL, php, olap
Попробуйте отселектить значение в переменную mysql https://dev.mysql.com/doc/refman/5.0/en/user-varia... , а потом сделать ее инсерт.
Последовательное выполнение, должно решить проблему.
Ответ написан
Комментировать
opium
@opium
Просто люблю качественно работать
Храните квантити отдельно и увеличивайте его при инсерт ах и делетах.
Решение у вас такое что надо руки вам отрубить.
Ответ написан
Ваш ответ на вопрос

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

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