gpt4 book ai didi

SQLite3 "forgets"使用外键

转载 作者:IT王子 更新时间:2023-10-29 06:18:20 26 4
gpt4 key购买 nike

我将 Ruby 与 SQLite3 结合使用,不幸的是,我尝试在 Sqlite3 中使用外键没有成功。根据 sqlite3 --version,安装了 3.7.13 版本。据我所知,Sqlite3 从 3.6.x 版本开始支持外键。

我知道默认情况下外键是停用的,必须使用 PRAGMA foreign_keys = ON; 激活。在我的 Ruby db-create-script 中,我正在做这样的事情:

sql = <<-SQL
PRAGMA foreign_keys = ON;
CREATE TABLE apps (
id ....
);
CREATE TABLE requests (
...
app_id INTEGER NOT NULL,
FOREIGN KEY(app_id) REFERENCES apps(id),
);
...
SQL
db.execute_batch(sql)

不幸的是,我可以愉快地将行插入到具有未知应用程序 ID 的请求中,它可以工作,但当然不应该。

有趣:直接使用 sqlite3 shell,我可以观察到以下行为:

$ sqlite3 database.db
sqlite> PRAGMA foreign_keys = ON;
sqlite> PRAGMA foreign_keys;
1 // as expected
sqlite> .quit
$ sqlite3 database.db
sqlite> PRAGMA foreign_keys;
0 // off ?!

在不退出 sqlite3 shell 的情况下,外键在激活它们(并且不退出 shell)后正在工作并且不允许插入具有未知 app_id 的行。

最佳答案

我想我可以回答我自己的问题:文档说:默认情况下禁用外键约束(为了向后兼容),因此必须为单独的每个数据库连接启用。很烦人,但现在终于可以用了。

关于SQLite3 "forgets"使用外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15301643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com