2010-12-17 145 views
1

我有表。它有5列,其中3列是主键组合。在oracle中更新主键

表(可乐,COLB,COLC,冷,油菜)

我想更新其是在主键组列中的一个。怎么做?

它给出主键约束错误。

+3

你为什么要更新主键?它应该是不可变的。 – davek 2010-12-17 10:18:35

+0

有需要。请帮助 – 2010-12-17 10:19:39

+2

您希望您的参考数据保持不变或修改? – 2010-12-17 10:30:56

回答

2

您应该禁用您的修改,重新启用链接到您的主键的约束。 (唯一的,非空,等...)

看看这个website

2

如果你真的需要在这三根柱子保持唯一性,然后定义一个唯一约束的三列组成的当前的PK,然后定义一个新的代理主键列。

+1

为什么?主键只是候选键。您使用哪个唯一性约束来强制执行密钥并没有什么不同。至于添加替代品,这一切取决于你将如何使用它。为了它而添加替代品没有意义。稳定性(不是“不变性”)是任何关键的有用属性,但它不是绝对的要求。即使代理键有时需要更新。 – sqlvogel 2010-12-17 10:58:53

+4

如果您不得不为特殊情况(例如数据迁移)以外的任何事情更新主键,那么我会建议设计出现问题:http://stackoverflow.com/questions/2499246/how-更新主键/ 2499507#2499507 – davek 2010-12-17 11:03:06

+1

我不同意。你可能想要做这件事有很好的理由。但无论如何,你建议的解决方案并没有实际的区别。更新由PRIMARY KEY约束强制执行的约束与更新由UNIQUE密钥约束执行的密钥完全相同。如果你真的打算说*外键*,那么我认为你可以明确表示 - 可能没有任何外键引用复合键,即使有,那么是否需要更新取决于需求。所以我认为你的答案根本没有帮助。 – sqlvogel 2010-12-17 11:35:22