使用 SQL 删除 DB2 约束

Drop DB2 constraint using SQL

我有一个名为 'test' 的 DB2 数据库,我使用以下查询在其中创建了一个 table。

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 从这个 table 中删除约束 "UNIQUE (ENTITY_TYPE, TENANT_ID, ENTITY_LOCAL_USERSTORE, ENTITY_NAME)"。我该怎么做?

更新

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

"ALTER TABLE IDP_PROVISIONING_ENTITY DROP UNIQUE <CONSTRAINT NAME>"

此外,这些约束名称在 table "sysibm.systabconst" 和 "SYSCAT.TABCONST".

中可用

但我仍然遇到的问题是,如何使用与其关联的列来获取唯一约束的名称?

第一个运行

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

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

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

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

alter table <TABLE_NAME> drop unique <CONSTRAINT_NAME>;