使用 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>;
我有一个名为 '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>;