SQLite的“ NO ACTION”外键约束到底有什么作用?它与“ RESTRICT”有什么不同?

yon*_*joy 6 sqlite android

文件说:

配置“ NO ACTION”仅意味着:当修改或删除数据库中的父键时,不会采取任何特殊操作。

我对这句话的第一个解释是“如果父键被修改或删除,那么就完成了此修改,并且没有采取其他措施”,因此无法保持数据库的完整性,这会引起一些混乱。但是我的测试表明,如果我尝试删除父键(如果子键仍然存在),则会收到异常(“ SQLiteConstraintException:错误代码19:约束失败”)-我正在android 4.0.3 / SQLite下进行测试3.7.x),因此“无操作”的行为似乎与预期的一样。

有人可以解释一下,也许可以举个例子,“ NO ACTION”到底做什么,与“ RESTRICT”有什么不同。

CL.*_*CL. 5

介绍段说:

如果未明确指定操作,则默认为“NO ACTION”。

正常动作。

此外:

RESTRICT 操作与正常外键约束强制执行的效果之间的区别在于,RESTRICT 操作处理在字段更新后立即发生 - 不是像立即约束那样在当前语句的末尾,或者在末尾当前事务的情况与具有延迟约束的情况一样。

如果您正在使用仅更改一条记录的单语句事务进行测试,则您不会看到NO ACTION和之间有任何差异RESTRICT

  • 但是,只有我认为文档中“NO ACTION”的措辞具有误导性吗? (7认同)