SQLite3 外键约束:为什么 INSERT 在没有引用的情况下会成功
虽然 SQLite3 提供了对外键约束的支持,但在尝试插入时会出现问题将记录写入子表而不遵守约束。这种神秘的行为可能会让您感到困惑。
为了解开这个谜团,让我们检查一下提供的 SQL 脚本。它建立两个表:“Persons”和“Orders”,其中“Orders”中的“P_Id”是引用“Persons”中主键的外键。
将数据插入“Orders”表时,即使“Persons”表为空,插入操作似乎也不会出现错误。这是因为 SQLite3.x 中不会自动启用外键约束。
要纠正此异常并强制外键完整性,每次与 SQLite 数据库建立连接时都必须执行以下“PRAGMA”查询:
PRAGMA foreign_keys = ON;
通过发出此指令,SQLite3 将严格执行所有外键约束,防止违反这些约束的插入
这种特性源于 SQLite 与其早期版本 SQLite 2.x 的遗留兼容性。然而,在 SQLite 4.x 中,外键约束将作为默认设置启用,从而掩盖了这种奇怪的行为。
以上是为什么 SQLite3 外键约束在使用'PRAGMAforeign_keys = ON;”之前似乎无法插入?的详细内容。更多信息请关注PHP中文网其他相关文章!