插入业务抛出死锁异常。
隔离级别为RR。
业务代码为
先 select ... for update;
后 insert ... values (...);
for update会加“目前最大索引值 ~ +∞ 的X锁,但是目前的select没走索引,所以加了聚簇索引的全范围X锁。导致锁表。
后续有其他线程插入时就发生了死锁。
参考:
segmentfault.com/a/119000003…
www.51cto.com/article/744…
插入业务抛出死锁异常。
隔离级别为RR。
业务代码为
先 select ... for update;
后 insert ... values (...);
for update会加“目前最大索引值 ~ +∞ 的X锁,但是目前的select没走索引,所以加了聚簇索引的全范围X锁。导致锁表。
后续有其他线程插入时就发生了死锁。
参考:
segmentfault.com/a/119000003…
www.51cto.com/article/744…