2017-07-26 102 views
0

我用外键读取所有以前的问题。我做了所有可能的配置,但我无法执行它的工作。 即使我在类型表中没有任何记录,我也可以插入到节点表中。但据我所知,外键约束不应该允许这种情况发生。Sqlite外键不起作用

CREATE TABLE nodes(
id int NOT NULL PRIMARY KEY , 
ver int NOT NULL, 
lock int NOT NULL, 
title varchar(50) NOT NULL, 
typeid int NOT NULL REFERENCES types(id), 
desc text NOT NULL, 
CHECK(trim(id) <> '' AND trim(ver) <> '' AND trim(lock) <>'' AND trim(title) 
<> '' AND trim(typeid) <> '' AND trim(desc) <> '') 
) 

CREATE TABLE "types" 
("id" INTEGER PRIMARY KEY NOT NULL , 
"name" TEXT NOT NULL) 

的SQLite 3.19.3

sqlite> PRAGMA foreign_keys; 
foreign_keys 
------------ 
1 

sqlite> PRAGMA foreign_keys_list; 
sqlite> 

我不知道为什么PRAGMA foreign_keys_list答案是空的。


,因为我在命令中使用s
纠正解决:PRAGMA foreign_key_list(nodes)

sqlite> PRAGMA foreign_key_list(nodes); 
id   seq   table  from  to   on_update on_delete match 
---------- ---------- ---------- ---------- ---------- ---------- -------- ------------ 
0   0   types  typeid  id   NO ACTION NO ACTION NONE 
+0

谷歌搜索'sqlite杂注外键列表'是什么让你? – philipxy

+0

它应该显示我的外键,但结果是空的。我在我的节点表中定义外键。 – AEF

+0

我的错误,我误读。 – philipxy

回答

0

语法PRAGMA foreign_key_list(table-name);

+0

我也检查它。结果是空的。我认为它应该显示 PRAGMA foreign_key_list(节点); – AEF

1

删除skey - SQlite的不会,如果您发出警告你犯了一个错字,并且什么都不返回。

+0

你说得对。但是为什么我可以插入任何东西到我的节点表中,即使我没有类型表中的任何数据?这是我的问题。为什么我没有得到任何错误? – AEF