MySQL的锁异常

146 阅读1分钟

锁等待

General error: 1205 Lock wait timeout exceeded;

死锁

Serialization failure: 1213 Deadlock found when trying to get lock;

分析死锁的常用办法

查看故事现场

show engine innodb status

解决方案

  1. 使用手动事务块包裹
  2. 拆分大事务,并减少事务语句数量
  3. 加锁where条件字段要有索引,加锁where条件顺序要一致,让死锁变为锁等待
  4. innodb的行锁,锁的是查询条件中的索引字段,以及索引字段对应的primary key字段

其他参考