【问题标题】:Drop DB2 constraint using SQL使用 SQL 删除 DB2 约束
【发布时间】:2016-02-15 11:25:33
【问题描述】:

我有一个名为“test”的 DB2 数据库,并使用以下查询在那里创建了一个表。

CREATE TABLE IDP_PROVISIONING_ENTITY (
        ID INTEGER NOT NULL,
        PROVISIONING_CONFIG_ID INTEGER NOT NULL,
        ENTITY_TYPE VARCHAR(255) NOT NULL,
        ENTITY_LOCAL_USERSTORE VARCHAR(255) NOT NULL,
        ENTITY_NAME VARCHAR(255) NOT NULL,
        ENTITY_VALUE VARCHAR(255) NOT NULL,
        TENANT_ID INTEGER NOT NULL,
        PRIMARY KEY (ID),
        UNIQUE (ENTITY_TYPE, TENANT_ID, ENTITY_LOCAL_USERSTORE, ENTITY_NAME),
        UNIQUE (PROVISIONING_CONFIG_ID, ENTITY_TYPE, ENTITY_VALUE),
        FOREIGN KEY (PROVISIONING_CONFIG_ID) REFERENCES IDP_PROVISIONING_CONFIG(ID) ON DELETE CASCADE)
/

我想使用 sql 从此表中删除约束“UNIQUE (ENTITY_TYPE, TENANT_ID, ENTITY_LOCAL_USERSTORE, ENTITY_NAME)”。我该怎么做?

更新

我发现如果我有它的约束名称,我可以使用以下命令删除一个唯一约束。

"ALTER TABLE IDP_PROVISIONING_ENTITY DROP UNIQUE <CONSTRAINT NAME>"

这些约束名称在“sysibm.systabconst”表和“SYSCAT.TABCONST”中也可用。

但我还有一个问题是,如何通过关联的列来获取唯一约束的名称?

【问题讨论】:

  • 更改表删除约束。 (您必须先找到约束名称。)
  • 我怎样才能找到,我检查了'SYSCAT.INDEXES'表,但是当我有两个数据库具有同一个表时,我无法检索所需表的约束名称。
  • 当两个数据库具有相同的表时,我仍然看不到获得所需约束的方法。
  • 既然它是一个测试数据库,你不能直接删除表并重新创建它吗?这次没有唯一的约束。

标签: sql db2 constraints


【解决方案1】:

第一次运行

select INDNAME from SYSCAT.TABCONST WHERE TABNAME='IDP_PROVISIONING_ENTITY' AND COLNAMES='+ENTITY_TYPE+TENANT_ID+ENTITY_LOCAL_USERSTORE+ENTITY_NAME

在这里,您将获得约束名称: 例如:SQL160215110206360

然后运行

ALTER TABLE IDP_PROVISIONING_ENTITY DROP CONSTRAINT SQL160215110206360

【讨论】:

  • 这是不正确的。为约束创建的索引不一定与约束具有相同的名称。正如@data_henrik 在上面的 cmets 中提到的,您必须查看 SYSCAT.TABCONST 以获得正确的约束名称。
  • 谢谢,我会更正答案,但我仍然无法使用与该(唯一)约束关联的列获取约束名称?
  • 更正了答案
【解决方案2】:

我正在使用SYSCAT.KEYCOLUSE。比我能够放弃唯一约束。否则不行。关键在于找出约束的正确名称。唯一约束是由它自己的约束和它的名字组合而成的,例如SQL190703165844530 和唯一索引,它有自己的不同名称,例如SQL190703165844444.

select * from SYSCAT.KEYCOLUSE where TABSCHEMA = <TABSCHEMA> and TABNAME = <TABNAME>;

可以通过子句将唯一约束和索引一起删除 :

alter table <TABLE_NAME> drop unique <CONSTRAINT_NAME>;

【讨论】:

    猜你喜欢
    • 2019-04-03
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 2015-07-03
    • 2012-06-02
    • 1970-01-01
    相关资源
    最近更新 更多