两个事务t1和t2,假如t1先对表a的记录a1加了锁,而t2对表a的记录a2加了锁。
然后t1又需要对a2加锁,t2又需要对a1加锁。
这时候就会因为持有对方需要的锁,而又等待对方释放自己需要的锁,导致死锁。
比如两个账户记录转账,两个事务,一个事务是从a转账给b,一个事务是从b转账给a。如果如果都是先给转出账户(或转入账户)加锁,然后给转入账户(或转出账户)加锁。就可能出现死锁。
这个可以通过加锁时都是先给主键值小的记录加锁,然后给主键值大的记录加锁,就会避免出现死锁了。
如果有帮助到你,请点击采纳。
我解答的大部分是软件开发新人遇到的问题,如果有兴趣可以关注我。
首先查询出差异的数据来,然后执行 insert 将数据插入到表B即可
insert into 表Bselect 表A.*
from 表A
where not exists( --找出差异的数据
select 1 from 表B
where 表A.id = 表B.id -- 根据实际字段匹配两表
)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)