通过JDBC删除Derby中的所有约束

tob*_*yer 5 java jdbc derby

如何通过JDBC删除Derby数据库中的所有约束?

Pas*_*ent 4

您可以查询系统表 SYS.SYSCONSTRAINTS、SYS.SYSTABLES 和 SYS.SYSSCHEMAS 以获取给定架构的所有约束名称和相关表。

首先,简单介绍一下这些表(来自Re: Derby 中的系统表):

SYSTABLES 数据库中的每个表都有一行。它的主键是 TABLEID,其中包含系统生成的值。SCHEMAID 是一个外键列,它引用 SYSSCHEMAS。

SYSSCHEMAS 数据库中的每个架构都有一行。它的主键是 SCHEMAID。

...

SYSCONSTRAINTS 数据库中的每个约束(主要约束、唯一约束、外部约束和检查约束)都有一行。它的主键是 CONSTRAINTID,它是系统生成的值。TABLEID 列是引用 SYSTABLES.TABLEID 的外键。SCHEMAID 列是引用 SYSSCHEMAS.SCHEMAID 的外键。

因此您可以使用以下查询:

SELECT 
    C.CONSTRAINTNAME,
    T.TABLENAME 
FROM 
    SYS.SYSCONSTRAINTS C, 
    SYS.SYSSCHEMAS S,
    SYS.SYSTABLES T 
WHERE 
    C.SCHEMAID = S.SCHEMAID 
AND 
    C.TABLEID = T.TABLEID
AND 
    S.SCHEMANAME = 'MYSCHEMA';
Run Code Online (Sandbox Code Playgroud)

然后循环并构建相应的 ALTER TABLE DROP CONSTRAINT 语句。

参考