【问题标题】:Can't drop constraint for table in Oracle 11g?不能在 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';

标签: sql database oracle


【解决方案1】:

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

alter table ORGANIZATION.USER drop constraint UK8UT91DB3XDTLS2X61E63IWYM4 CASCADE

如果您忘记使用它,其他一些约束元素可能会保持活动状态(唯一或索引)

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

DROP INDEX ORGANIZATION.UK8UT91DB3XDTLS2X61E63IWYM4

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 2022-01-26
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多