# InnoDB , RR 事务隔离级别
# t2 表的 pulbish_id 为非唯一索引
# S1 语句:
INSERT INTO `t1` (contract_no...)
SELECT 'A10-SJZ-21017' ...
FROM DUAL
WHERE NOT EXISTS(SELECT *
FROM `t2` tmrd
where publish_id = '1123424214'); #这里的 publish_id 一定不存在,所以会产生全表锁
# S2 语句:
INSERT INTO t2
(publish_id...)
values ('1123424214'...)
目前的问题是:
- 事务一运行 S1 未提交,事务二运行 S2 会阻塞
- 事务一运行 S1 未提交,事务二运行对 t2 表的
for update/lock in share model不会阻塞 - 事务一运行 S1 未提交,事务二运行 S1 ,S2 (阻塞),事务一运行 S2 ,产生死锁异常
[40001][1213] Deadlock found when trying to get lock; try restarting transaction