不能在Oracle 11g中删除对表的约束吗?

时间:2019-02-16 07:41:51

标签: sql database oracle

我有oracle 11g数据库。 因此,在过去,我对表User的名称和姓氏具有uniq约束,所以 我的桌子是

id     name    surname     age    position

和约束:

alter table User add constraint UK8ut91db3xdtls2x61e63iwym4 unique (name, surname);

但是现在,我需要删除此约束,因此名称和姓氏必须不唯一。 我从基础脚本中删除了此约束:

  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) 

1 个答案:

答案 0 :(得分:0)

首先,消除约束的正确方法是:

alter table ORGANIZATION.USER drop constraint UK8UT91DB3XDTLS2X61E63IWYM4 CASCADE

如果您忘记使用它,约束的其他某些元素可能仍然有效(唯一或索引)

(可选)您可以删除具有相同名称和索引唯一

DROP INDEX ORGANIZATION.UK8UT91DB3XDTLS2X61E63IWYM4

alter table ORGANIZATION.USER drop UNIQUE (name, surname);