Java 用于禁用约束的Informix DDL执行
我计划禁用外键约束,以避免在清除某些数据时出现递归关系。主要步骤如下:Java 用于禁用约束的Informix DDL执行,java,constraints,informix,ddl,Java,Constraints,Informix,Ddl,我计划禁用外键约束,以避免在清除某些数据时出现递归关系。主要步骤如下: Connection conn = getConnection(SI_SINGLE_URL2, SI_UNAME2, SI_PASS2); // will return a valid java,sql.Connection Statement stmt = conn.createStatement(); boolean isConstraintDisabled = stmt.execute("ALTER TABLE z
Connection conn = getConnection(SI_SINGLE_URL2, SI_UNAME2, SI_PASS2); // will return a valid java,sql.Connection
Statement stmt = conn.createStatement();
boolean isConstraintDisabled = stmt.execute("ALTER TABLE zee_temp_tab_2 NOCHECK CONSTRAINT ALL");
stmt.executeQuery("DELETE FROM zee_temp_tab_2 WHERE id = 'A'");
boolean isConstraintEnabled = stmt.execute("ALTER TABLE zee_temp_tab_2 CHECK CONSTRAINT ALL");
请建议如何操作。禁用表的所有约束(PK、uniques、notnull、check)
为禁用的表设置约束;
或者一个特定的约束
set constraints <constraint_name> disabled;
禁用设置约束;
要启用,只需使用“enabled”参数。
观察:所有PK、FKs和UNIQUEs将重新创建它们的内部索引。。。根据您的记录,可能需要一段时间。。。。小心点
其他选项是使用“延迟”选项(这样您不需要禁用,但需要在单个事务中完成所有操作。)
set constraints我不想使用存储过程,我想使用JDBC API来实现。@Zeeshan,我不知道在我描述的命令中您在哪里看到存储过程。它们都是Informix语句,您可以在其中使用stmt.execute调用它们,就像您的代码一样。当然,您可能会用Informix JDBC调用来代替开始工作
/提交工作
,以控制事务。
set constraints <constraint_name> disabled;
set constraints <ALL|constraint_name> deferred;
begin work;
-- do what you have to do
commit work; -- the constraints will be validated here...
set constraints <ALL|constraint_name> immediate;