sqlite3 – SQLite多对多关系?

sqlite3 – SQLite多对多关系?,第1张

概述我正在尝试使用foos和bar设置一个SQLite3数据库,并在它们之间建立多对多的关系.这是我到目前为止 CREATE TABLE foo( id INTEGER PRIMARY KEY NOT NULL, foo_col INTEGER NOT NULL);CREATE TABLE bar( id INTEGER PRIMARY KEY NOT NULL, 我正在尝试使用foos和bar设置一个sqlite3数据库,并在它们之间建立多对多的关系.这是我到目前为止
CREATE table foo(    ID INTEGER PRIMARY KEY NOT NulL,foo_col INTEGER NOT NulL);CREATE table bar(    ID INTEGER PRIMARY KEY NOT NulL,bar_col TEXT NOT NulL);CREATE table foobar(    foo_ID INTEGER,bar_ID INTEGER,FOREIGN KEY(foo_ID) REFERENCES foo(ID) ON DELETE CASCADE,FOREIGN KEY(bar_ID) REFERENCES bar(ID) ON DELETE CASCADE);CREATE INDEX fooindex ON foobar(foo_ID);CREATE INDEX tagindex ON foobar(tag_ID);

…但似乎没有工作.我可以从foo中删除一行,并且不影响foobar.我究竟做错了什么?

来自本网站,http://www.sqlite.org/foreignkeys.html.

假设库是使用外键约束编译的,那么在运行时,使用PRAGMA foreign_keys命令,它仍然必须由应用程序启用.例如:

sqlite> PRAGMA foreign_keys = ON;

默认情况下禁用外键约束(为了向后兼容),因此必须单独为每个数据库连接单独启用外键约束. (请注意,未来的sqlite版本可能会发生变化,以致默认情况下启用外键限制.仔细的开发人员不会对外键是否启用任何假设,而是根据需要启用或禁用外部键.)应用程序也可以使用PRAGMA foreign_keys语句来确定外键当前是否启用.以下命令行会话演示如下:

sqlite> PRAGMA foreign_keys;0sqlite> PRAGMA foreign_keys = ON;sqlite> PRAGMA foreign_keys;1sqlite> PRAGMA foreign_keys = OFF;sqlite> PRAGMA foreign_keys;0

提示:如果命令“PRAGMA foreign_keys”不返回任何数据,而不是包含“0”或“1”的单个行,那么您使用的sqlite版本不支持外键(或者因为它大于3.6.19或因为它是使用sqlITE_OMIT_FOREIGN_KEY或sqlITE_OMIT_TRIGGER进行编译的).

在多语句事务的中间(sqlite不处于自动提交模式)时,不可能启用或禁用外键约束.尝试这样做不会返回错误;它根本没有效果.

总结

以上是内存溢出为你收集整理的sqlite3 – SQLite多对多关系?全部内容,希望文章能够帮你解决sqlite3 – SQLite多对多关系?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/1161111.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-01
下一篇2022-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存