【发布时间】:2020-02-27 14:22:44
【问题描述】:
我有 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 事务怎么可能不受死锁保护?事务不是按顺序运行的吗?
【问题讨论】:
标签: mysql concurrency transactions deadlock isolation-level