1213: Обнаружена взаимоблокировка при попытке получить блокировку; попробуйте перезапустить транзакцию
MySQLЧто это значит?
InnoDB обнаружил взаимоблокировку, при которой две или более транзакции ждут блокировки друг друга, и разорвал цикл, откатив одну из транзакций.
Почему возникает?
Захват блокировок строк в разном порядке, перекрёстные обновления одних и тех же строк, блокировка широких диапазонов строк (gap locks) из-за отсутствующих индексов или конфликты при проверках внешних ключей.
Как исправить
Просмотрите сведения о последней взаимоблокировке: SHOW ENGINE INNODB STATUS (раздел LATEST DETECTED DEADLOCK). Во всех транзакциях обращайтесь к строкам/таблицам в одном и том же порядке и делайте транзакции короткими. Сузьте блокируемый диапазон, добавив подходящие индексы. Перехватывайте откатанную транзакцию в приложении и повторяйте её (логика повтора).