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

时间:2010-09-09 12:47:34

标签: java jdbc derby

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

2 个答案:

答案 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