【问题标题】:Drop all constraints in Derby via JDBC通过 JDBC 删除 Derby 中的所有约束
【发布时间】:2011-04-10 06:00:21
【问题描述】:

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

【问题讨论】:

  • JDBC 有一个元数据 API,您可以在其中获取所有表/约束。有了这个,您应该能够构建一些 DDL 语句来删除约束。
  • 谢谢。如果您将其放入答案中,我可以接受。
  • @ZeissS: 只是一个评论来通知你上面的评论:) @tob: 使用@nickname 通知评论者(那些没有发布原始问题或答案的人)关于一个在 cmets 中响应。
  • 太酷了。我不知道,谢谢@BalusC :)此外,我认为帕斯卡给出了更好的答案,所以我跳过提供自己的答案;)

标签: java jdbc derby


【解决方案1】:

您可以查询系统表 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 语句。

参考文献

【讨论】:

    【解决方案2】:

    我不确定我是否理解为什么以编程方式删除数据库中的所有约束会很有用。尽管如此,对于使用 DatabaseMetaData API 为 Derby 数据库中的特定模式查找各种约束和其他依赖对象(视图等)的代码示例,您可以查看 DatabaseMetaData API Derby 测试工具的 JDBC.java 实用程序中的 em>dropSchema() 方法:http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/JDBC.java?view=co

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 2014-04-16
      • 2010-09-15
      • 1970-01-01
      • 2015-07-03
      • 1970-01-01
      相关资源
      最近更新 更多