gpt4 book ai didi

database - 我们可以更新表的主键值吗?

转载 作者:太空狗 更新时间:2023-10-30 01:39:03 25 4
gpt4 key购买 nike

我们可以更新表的主键值吗?

最佳答案

普遍认为primary keys should be immutable (或 as stable as possible,因为无法在数据库中强制执行不变性)。虽然没有什么可以阻止您更新主键(完整性约束除外),但这可能不是一个好主意:

从性能的角度来看:

  • 您需要更新所有引用已更新 key 的外键。一次更新可能导致更新潜在的大量表/行。
  • 如果外键没有索引 (!!),您将必须在子表上保持锁定以确保完整性。 Oracle 只会持有锁很短的时间,但这仍然很可怕。
  • 如果你的外键被索引了(理应如此),更新将导致索引的更新(索引结构中的删除+插入),这通常比基表的实际更新更昂贵。
  • 在 ORGANIZATION INDEX 表中(在其他 RDBMS 中,请参阅聚簇主键),行按主键进行物理排序。逻辑更新将导致物理删除+插入(更昂贵)

其他注意事项:

  • 如果在任何外部系统(应用程序缓存、另一个数据库、导出...)中引用此键,则引用将在更新时被破坏。
  • 另外,一些 RDBMS 不支持级联更新,in particular Oracle .

总而言之,在设计过程中,使用代理键代替自然主键通常更安全,因为自然主键应该不会更改——但最终可能需要更新,因为需求发生变化甚至数据输入错误。

如果您绝对必须更新带有子表的主键,请参阅 this post by Tom Kyte for a solution .

关于database - 我们可以更新表的主键值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3838414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com