知识前提:
InnoDB引擎在加锁的时候,只有通过索引进行检索的时候才会使用行级锁,否则会使用表级锁。
场景:
在订单服务中,开起事务,对同一张表,先更新(无索引),再新增,发生死锁。
原因:
同一线程,更新事务未提交,因为无索引导致了表锁,再新增的时候当前线程等待更新释放锁,会把当前线程挂起来,而锁正是被自己占用,该线程又被挂起而没机会释放锁。
解决方法:
更新的时候在检索列创建索引,这样就会行锁,不会发生表锁。
知识前提:
InnoDB引擎在加锁的时候,只有通过索引进行检索的时候才会使用行级锁,否则会使用表级锁。
场景:
在订单服务中,开起事务,对同一张表,先更新(无索引),再新增,发生死锁。
原因:
同一线程,更新事务未提交,因为无索引导致了表锁,再新增的时候当前线程等待更新释放锁,会把当前线程挂起来,而锁正是被自己占用,该线程又被挂起而没机会释放锁。
解决方法:
更新的时候在检索列创建索引,这样就会行锁,不会发生表锁。