【发布时间】: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'表,但是当我有两个数据库具有同一个表时,我无法检索所需表的约束名称。
-
检查
SYSCAT.TABCONSTwww-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/… -
当两个数据库具有相同的表时,我仍然看不到获得所需约束的方法。
-
既然它是一个测试数据库,你不能直接删除表并重新创建它吗?这次没有唯一的约束。
标签: sql db2 constraints