如何通过JDBC删除Derby数据库中的所有约束?
答案 0 :(得分:4)
您可以查询系统表SYS.SYSCONSTRAINTS,SYS.SYSTABLES和SYS.SYSSCHEMAS以获取给定模式的所有约束名称和相关表。
首先,关于这些表格的几句话(来自Re: System tables in 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';
然后循环并构建相应的ALTER TABLE DROP CONSTRAINT语句。
答案 1 :(得分:0)
我不确定我理解为什么以编程方式删除数据库中的所有约束会有用。尽管如此,对于使用 DatabaseMetaData API查找Derby数据库中特定模式的各种约束和其他依赖对象(视图等)的代码示例,您可以查看< Derby测试工具的 JDBC.java 实用程序中的em> dropSchema ()方法:http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/JDBC.java?view=co