1

我计划在清除某些数据时禁用外键约束以避免递归关系。主要步骤写如下:

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");

请告知如何做。

4

1 回答 1

2

禁用表的所有约束(PK,唯一,不为空,检查)

 set constraints for table <table> disabled;

或特定的约束

 set constraints <constraint_name> disabled;

要启用,只需使用“启用”参数。观察:所有 PK、FK 和 UNIQUE 都将重新创建它们的内部索引……取决于您的记录数,可能需要一些时间……小心。

其他选项是使用“延迟”选项(这样您不需要禁用,但需要在单个事务中完成所有操作。)

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;

还有“过滤”选项......但这有点复杂,需要您的 DBA 的支持。

有关更多信息,请在在线手册中搜索此命令

于 2013-08-07T16:01:08.080 回答