【发布时间】:2021-07-02 07:46:45
【问题描述】:
例如,假设 DB 具有外键 A.b_id -> B.id,删除时设置为 NULL。 如果某个 B.id 的记录被删除,所有的 b_id 引用都将被设置为 NULL。
但是如果 A 已经包含 A.b_id 的值不在 B.id 中的记录(它是在没有外键支持的情况下插入的),有没有办法强制 SQLite DB 检查外键并将此类数据设置为 NULL?
事实上,首先我正在解决数据库升级任务。
在启动应用程序时检查内部数据库(资源)的版本是否高于用户数据库。 如果是这样,它会备份用户数据库,将内部空数据库复制到用户存储。比关闭外键支持并用备份数据填充新数据库,自动将所有具有相同名称的列插入到循环表中。开启外键支持。
一切正常,但是如果在旧数据库的某个表中以前没有外键约束,而新数据库有外键约束,则数据将按原样插入,链接无法指向任何地方(可能错误的链接是不可避免的并且不相关质疑)。
是的,我了解一种在不关闭外键支持的情况下插入的方法,但它需要了解我想避免的表依赖顺序。
提前感谢您的帮助!
【问题讨论】:
-
开启外键支持不会对现有数据强制执行任何参照完整性检查。
-
是的,我知道。所以,正如你所看到的,我很感兴趣是否有一个命令可以强制进行此类检查。
标签: sqlite foreign-keys referential-integrity