【发布时间】:2015-10-28 16:47:48
【问题描述】:
- 我有一个表,其中
Col1和Col2作为复合主键pk_composit_key和一个为约束自动创建的唯一索引。 - 然后我更改了表格以添加新列
Col3。 -
我放弃了
pk_composit_key约束:ALTER TABLE table_name DROP CONSTRAINT pk_composit_key;
-
现在,当我尝试插入记录时,我得到了
ORA-00001: unique constraint pk_composit_key violated。- 为什么会出现该错误?
- 删除键后,为什么没有自动删除唯一索引?
【问题讨论】:
-
您插入的记录是否违反了新的三值复合键,无论如何都会有同名的索引?你不能按你说的去做。如果索引是由第一个约束自动创建的,它将被删除。如果它是在约束之前手动创建的,那么它会在删除之后保留,但第二个约束的创建将失败,因为现有索引现在与约束列不匹配。
-
@AlexPoole 当我们删除约束时,索引仍然存在。然后当我们尝试插入新记录时,它会说唯一索引违规。我稍微更新了问题
-
当您尝试打破约束时,您会遇到唯一索引冲突,这是正常的。您现在是说在尝试重新创建主键之前遇到该错误吗?还是重建后?你是如何检查它在最初的下降后仍然存在的?目前我不确定你是否只是误解了你得到的错误,当你插入实际上有重复 col1、col2、col3 值的数据时;或者如果您没有重新创建约束,无论您是第一次手动创建索引。
-
@AlexPoole 我在插入时在第 4 步出错。尚未创建新的约束。我可以在 user_indexes 中列出该索引名称。
-
能否创建一个测试用例,包含所有创建表、约束等语句,重现问题?这样,我们可以尝试为自己重复相同的步骤,这将使我们能够为您提供更好的帮助。
标签: oracle unique-constraint composite-primary-key