不能在 Oracle 11g 中删除表的约束?
Posted
技术标签:
【中文标题】不能在 Oracle 11g 中删除表的约束?【英文标题】:Can't drop constraint for table in Oracle 11g? 【发布时间】:2019-02-16 07:41:51 【问题描述】:我有 oracle 11g 数据库。 所以,过去我对表用户的姓名和姓氏有 uniq-constraint,所以 我的桌子是
id name surname age position
和约束:
alter table User add constraint UK8ut91db3xdtls2x61e63iwym4 unique (name, surname);
但是现在,我需要移除这个约束,所以 name 和 surname 不能是唯一的。 我通过脚本从 base 中删除了这个约束:
alter table ORGANIZATION.USER drop constraint UK8UT91DB3XDTLS2X61E63IWYM4
并且这个约束被取消了:
SELECT * FROM all_constraints WHERE CONSTRAINT_NAME='UK8UT91DB3XDTLS2X61E63IWYM4'
最后一个脚本什么也不返回。
但是,如果我尝试插入具有相同姓名和姓氏但 ID 不同的几行 - 就会出现错误
INSERT INTO ORGANIZATION.USER(id, name, surname, age, position) VALUES (111-222, 'Natalia', 'Solzhenizina', 22, 'consultant')
Error report -
ORA-00001: нарушено ограничение уникальности (constraint violetion on unique) (SBDATASVCS.UK8UT91DB3XDTLS2X61E63IWYM4)
【问题讨论】:
你的表名不一致。您确定要从同一个表中添加和 droppng 约束吗?您要向其中插入数据的表上是否有任何触发器? 能否添加查询的输出 SELECT * FROM all_constraints WHERE table_name = 'USER'; 【参考方案1】:首先,删除约束的正确方法是:
alter table ORGANIZATION.USER drop constraint UK8UT91DB3XDTLS2X61E63IWYM4 CASCADE
如果您忘记使用它,其他一些约束元素可能会保持活动状态(唯一或索引)
您可以选择删除具有相同名称和索引的唯一。
DROP INDEX ORGANIZATION.UK8UT91DB3XDTLS2X61E63IWYM4
alter table ORGANIZATION.USER drop UNIQUE (name, surname);
【讨论】:
以上是关于不能在 Oracle 11g 中删除表的约束?的主要内容,如果未能解决你的问题,请参考以下文章