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

发布于 2024-09-18 13:38:53 字数 36 浏览 8 评论 0原文

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

How can I drop all constraints in a Derby database via JDBC?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

万劫不复 2024-09-25 13:38:53

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

首先,介绍一下这些表(来自 回复: 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 语句。

参考文献

You could query the system tables SYS.SYSCONSTRAINTS, SYS.SYSTABLES and SYS.SYSSCHEMAS to get all constraint names and the related tables for a given schema.

First, a few words about those tables (from Re: System tables in Derby):

SYSTABLES has one row for each table in the database. Its primary key is TABLEID, which contains system-generated values. The SCHEMAID is a foreign key column, which references SYSSCHEMAS.

SYSSCHEMAS has one row for each schema in the database. Its primary key is SCHEMAID.

...

SYSCONSTRAINTS has one row for each constraint in the database (primary, unique, foreign and check constraints). Its primary key is CONSTRAINTID, which is a system-generated value. The TABLEID column is a foreign key referring to SYSTABLES.TABLEID. The SCHEMAID column is a foreign key referring to SYSSCHEMAS.SCHEMAID.

So you could use the following query:

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';

And then loop and build the corresponding ALTER TABLE DROP CONSTRAINT statement.

References

执笔绘流年 2024-09-25 13:38:53

我不太确定我是否理解为什么以编程方式删除数据库中的所有约束会很有用。尽管如此,对于使用 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

I'm not really sure I understand why it would be useful to drop all the constraints in your database programatically. Nonetheless, for an example of code which uses the DatabaseMetaData API to find various constraints and other dependent objects (views, etc.) for a particular schema in a Derby database, you can have a look at the dropSchema() method in the Derby testing harness's JDBC.java utility: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/JDBC.java?view=co

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文