sqlite3 – SQLite多对多关系?
我正在尝试使用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; 0 sqlite> PRAGMA foreign_keys = ON; sqlite> PRAGMA foreign_keys; 1 sqlite> 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不处于自动提交模式)时,不可能启用或禁用外键约束.尝试这样做不会返回错误;它根本没有效果. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |