代码之家  ›  专栏  ›  技术社区  ›  tobiasbayer

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

  •  5
  • tobiasbayer  · 技术社区  · 14 年前

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

    2 回复  |  直到 9 年前
        1
  •  4
  •   ΦXocę 웃 Пepeúpa ツ    9 年前

    可以查询系统表sys.sysconstraints、sys.sys tables和sys.sysschemas,以获取给定架构的所有约束名称和相关表。

    首先,几句关于这些桌子的话(从 Re: System tables in Derby ):

    systables对于数据库中的每个表都有一行。它的主键是tableid,其中包含系统生成的值。schemaID是一个外键列,它引用了sysschemas。

    sysschemas对于数据库中的每个架构都有一行。它的主键是schemaid。

    sysconstraints为数据库中的每个约束(primary、unique、foreign和check约束)都有一行。它的主键是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约束语句。

    工具书类

        2
  •  0
  •   Bryan Pendleton    14 年前

    我真的不知道为什么用编程的方法删除数据库中的所有约束会有用。但是,对于使用 数据库元数据 API要查找Derby数据库中特定模式的各种约束和其他依赖对象(视图等),可以查看 下降模式 (三)德比测试线束的方法 爪哇爪哇 效用: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/JDBC.java?view=co