2020-07-08:mysql只有一个表a,什么情况下会造成死锁,解决办法是什么?

2020-07-08:mysql只有一个表a,什么情况下会造成死锁,解决办法是什么?,第1张

你好,很高兴回答你的问题。

两个事务t1和t2,假如t1先对表a的记录a1加了锁,而t2对表a的记录a2加了锁。

然后t1又需要对a2加锁,t2又需要对a1加锁。

这时候就会因为持有对方需要的锁,而又等待对方释放自己需要的锁,导致死锁

比如两个账户记录转账,两个事务,一个事务是从a转账给b,一个事务是从b转账给a。如果如果都是先给转出账户(或转入账户)加锁,然后给转入账户(或转出账户)加锁。就可能出现死锁。

这个可以通过加锁时都是先给主键值小的记录加锁,然后给主键值大的记录加锁,就会避免出现死锁了。

如果有帮助到你,请点击采纳。

我解答的大部分是软件开发新人遇到的问题,如果有兴趣可以关注我。

首先查询出差异的数据来,然后执行 insert 将数据插入到表B即可

insert into 表B

select 表A.*

  from 表A

 where not exists(   --找出差异的数据

           select 1 from 表B

            where 表A.id = 表B.id -- 根据实际字段匹配两表

       )


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6114665.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-15
下一篇 2023-03-15

发表评论

登录后才能评论

评论列表(0条)

保存