我读过这本关于数据库系统中的SQL关键字DEFERRABLE的书。
后者[不可延迟]是默认值,意味着每次执行数据库修改语句时,如果修改可能违反外键约束,则会立即检查该约束。
但是,如果我们声明一个约束是可延迟的,那么我们可以选择让它等到事务完成后再检查该约束。
我们遵循关键字DEFERRABLE,可以是最初的DEFERRABLE,也可以是最初的IMMEDIATE。在前一种情况下,检查将推迟到每个事务提交之前。在后一种情况下,将在每次陈述后立即进行检查。
NOT DEFERRABLEDEFERRABLE INITIALLY IMMEDIATE有何不同?在这两种情况下,似乎每个单独的语句之后都会检查任何约束。

最佳答案

使用DEFERRABLE INITIALLY IMMEDIATE可以在需要时延迟约束。
如果您通常希望在语句时检查约束,但对于例如批处理加载,希望将检查推迟到提交时间,则这非常有用。
但是,对于不同的DBMS,如何延迟约束的语法是不同的。
使用NOT DEFERRABLE您将永远无法将检查推迟到提交时间。

10-08 18:08