【发布时间】:2021-04-17 21:49:43
【问题描述】:
我正在使用 postgresql。我有 3 张桌子。
- 表 A 有一个作为主键的 ID 列
- 表 B 和 表 C 的 ID 列是对 A 的 ID 的外键引用。
在单个进程中,我想锁定任何具有特定 ID 的行,然后可能删除行并在 B 和 C 中插入具有该 ID 的行
我目前的做法是
- 在 ID 上的 A 上选择 FOR UPDATE。
- 然后我尝试在 B 和 C 中删除和插入行。
- 提交/结束
不幸的是,我的代码在尝试插入时出现死锁。
我做错了什么?防止其他进程在 B 和 C 中添加、删除或更新具有给定 ID 的行的正确方法是什么(直到我完成我的事务)?
提前致谢!
【问题讨论】:
标签: sql postgresql foreign-keys dml