不能在 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 中删除表的约束?的主要内容,如果未能解决你的问题,请参考以下文章

oracle11g,18存储结构:暂时表,手工条带化,表/索引迁移表空间,删除表,外部表

Oracle11g里的Users表空间可以删除吗

oracle数据库添加,查询,删除唯一约束

在 oracle11g系统中 约束的类型都有哪些

解决oracle 11g 导出空表的方法

Oracle 11g导出空表少表的解决办法