首页 > 数据库 > mysql教程 > 为什么 SQLite3 默认不强制执行外键约束?

为什么 SQLite3 默认不强制执行外键约束?

Mary-Kate Olsen
发布: 2025-01-05 10:10:40
原创
134 人浏览过

Why Doesn't SQLite3 Enforce Foreign Key Constraints by Default?

SQLite3 外键约束强制解释

在 SQLite3 中,默认情况下不强制执行外键约束。这种行为与大多数其他关系数据库管理系统 (RDBMS) 不同,导致习惯于强健约束实施的开发人员感到困惑。

问题描述

考虑以下示例:我们创建两个表,Persons Orders,Orders 中的外键约束引用了 Persons 中的主键。尽管定义了这个约束,我们仍然可以将行插入到 Orders 中,而在 Persons 中没有相应的记录。

根本原因和解决方案

在 SQLite3 版本 3.x 及更低版本中,必须显式外键约束每次连接到数据库时使用以下查询启用:

PRAGMA foreign_keys = ON;
登录后复制

这是因为 SQLite3 保持与其早期版本的向后兼容性, SQLite2.x,不支持外键约束。

禁用外键强制执行的原因

默认禁用外键强制执行的决定主要是由 SQLite 作为嵌入式数据库的传统驱动的,用于性能至关重要的应用程序。外键约束会影响性能,尤其是在高并发场景下。

未来版本的注意事项

在 SQLite4.x 中,默认启用外键约束。此更改解决了当前行为引起的潜在混乱和挫败感。

实际影响

在提供的示例的上下文中,应该执行 PRAGMAforeign_keys = ON;启用外键强制执行的语句。之后,向 Orders 中插入记录而在 Persons 中没有对应的记录时将导致错误,正如预期的那样。

以上是为什么 SQLite3 默认不强制执行外键约束?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板