暂无图片
pg中如何只用delete from t where id in () 模拟一个死锁的发生?
我来答
分享
暂无图片 匿名用户
pg中如何只用delete from t where id in () 模拟一个死锁的发生?

一个表t 有2个字段,id int ,name  varchar  ,其中id是主键,


能否模拟出只用一个语句delete from  t  where  id in (?,?) 模拟出一个死锁的发生 ??


前提是不能删除重叠的数据?

比如会话1 执行

delete from t where id in (1,2)  ,

delete from t where id in (3,4) 

不提交

会话2

delete from t where id in (3,4) ,

delete from t where id in (1,2) ,

不提交

这种交叉删除的场景不算,因为删除数据有重叠的

除了上面这种场景的,还有其他的场景没?


我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
布衣
暂无图片

死锁肯定会有数据重叠啊,为什么产生死锁,就是因为A占用了数据1,2,B要占用2,3,C要占用3,1。3个连接相互抢占锁资源。
没有数据重叠,怎么形成死。
希望对你的思路有所帮助。

暂无图片 评论
暂无图片 有用 1
手机用户9375
2022-09-08
我这就碰到没有数据重复,却形成死锁的案例
刘贵宾
暂无图片 评论
暂无图片 有用 0
手机用户9375
2022-09-08
他这个是执行顺序不一样,先执行1,2 在执行2,1,我这碰到的没有重复数据的,发生了死锁
张sir

我猜你是不是从死锁日志里看到了两条sql,其实这并不是完整产生死锁的事务sql,大概率这个事务中有别的sql。

暂无图片 评论
暂无图片 有用 0
手机用户9375
2022-09-09
高手呀,就是这个意思,死锁语句只有delete ,并且写法还一样
张sir

把死锁日志传上来看下?

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏