A线程,没开事务,同一个连接里面
语句1
Select *
FROM TableA
LEFT JOIN TableB
语句2(死锁)
Select Count(*)
FROM TableA
LEFT JOIN TableB
B线程
开事务
Insert into TableA
Insert Into TableB (死锁)
我没搞懂,我insert完了以后才提交事务的,
select又没有允许脏读什么的,为什么会死锁了呢?
...全文
41835打赏收藏
真没分了,但是又死锁了
A线程,没开事务,同一个连接里面 语句1 Select * FROM TableA LEFT JOIN TableB 语句2(死锁) Select Count(*) FROM TableA LEFT JOIN TableB B线程 开事务 Insert into TableA Insert Into TableB (死锁) 我没搞懂,我insert完了以后才提交事务的, select又没有允许脏读什么的,为什么会死锁了呢?
select Count(*) ... from a inner join b 没where条件,目的是干啥?
如果這樣,與insert a ....insert b 事务,不死锁都难。
如果不降低事务隔离级别,就要提升select 部分的查询效率和减低insert事务部分的时间。
先检查表有没有索引,有没有主键,外键。外键上记得要创建索引,这样可以减少类似死锁的发生。