sql - 如何在事务中短暂破坏引用完整性而不禁用外键约束?

标签 sql oracle hierarchical-data referential-integrity

我有一个包含 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/

相关文章:

sql - tsql group by 获取最大长度的字母数字列值

sql - 如何对数据集进行密集排名

r - 如何使用 dplyr 检测面板数据中变量随时间的变化?

python - 使用 Python 进行 SQLite 查询

sql - 如何跳过唯一约束错误

java - 用java从Oracle数据库中读取阿拉伯语数据

c# - Oracle数据访问版本问题

mysql - 计算与分层类别列表关联的产品

php - 如何使用数组值查询mysql/mariadb

javascript - 在 node.js 中导入 sql 文件并针对 PostgreSQL 执行