我有一个包含 3 列的表格:
ID, PARENT_ID, NAME
PARENT_ID
与同一个表中的ID
有外键关系。该表正在对层次结构进行建模。
有时记录的ID
会发生变化。我希望能够更新记录的 ID
,然后更新相关记录的 PARENT_ID
以指向新的 ID
。
问题是,当我尝试更新记录的 ID
时,它会破坏完整性并立即失败。
我意识到我可以用新的ID
插入一条新记录,然后更新子记录,然后删除旧记录,但是我们有很多触发器,如果我就这么做了。
有没有办法暂时更新父级并 promise 更新子级(显然它会在提交时失败)而无需短暂禁用外键?
最佳答案
你想要的是 ' deferred constraint '.
您可以在两种类型的可延迟约束“INITIALLY IMMEDIATE”和“INITIALLY DEFERRED”之间进行选择以驱动默认行为 - 数据库是否应默认在每个语句后检查约束,或者是否应默认仅检查约束在交易结束时。
关于sql - 如何在事务中短暂破坏引用完整性而不禁用外键约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3105730/