У меня MySql 5.7 и следующий код golang, который может быть запущен одновременно:
tx := s.db.Begin()
if err := tx.Exec(fmt.Sprintf("DELETE FROM related_table WHERE id = %d " item.ID)).Error; err != nil {
tx.Rollback()
}
// Save is ORM method, it make inserts into 'related_table' from the first query
if err := tx.Save(&item).Error; err != nil {
tx.Rollback()
}
Я улавливаю ошибку во время tx.Save(&item)
Ошибка 1213: при попытке установить тупикполучить блокировку;попробуйте перезапустить транзакцию
Вопрос:
Как возможно, что транзакция mysql не защищена от взаимоблокировок? Не выполняются ли транзакции последовательно?