为什么这个SQL查询不会返回任何错误?

时间:2013-05-13 08:56:32

标签: sql sqlite

当我运行这些查询时:

create table University ( branch text primary key, region text, enrollment int);
create table Student ( sID int primary key, sName text, average int);
create table Apply ( sID int references Student(sID), branch text references University(branch), major text, decision text);

insert into Apply values ( 123, 'stanford', 'CS', 'Y');

它应该返回一个错误,因为我在参考表中插入一个没有Corresponding值的元组。但是当我运行这些命令时,这个元组会成功地运行。这个查询有什么问题? 我的DBMS是sqlite,我正在使用sqliteman。

1 个答案:

答案 0 :(得分:1)

您应该学习如何enable foreign key support

引用文档:

  

为了在SQLite中使用外键约束,库必须是   既不用SQLITE_OMIT_FOREIGN_KEY也不用SQLITE_OMIT_TRIGGER编译   定义。如果定义了SQLITE_OMIT_TRIGGER但SQLITE_OMIT_FOREIGN_KEY   不是,然后SQLite的行为与版本3.6.19之前的行为相同 -   解析外键定义,并可使用PRAGMA查询   foreign_key_list,但不强制执行外键约束。该   PRAGMA foreign_keys命令在此配置中是无操作。如果   定义了OMIT_FOREIGN_KEY,然后外键定义不能   解析(尝试指定外键定义是一种语法   误差)。

另请阅读sqliteman constraint triggers

  

还有一个不受支持的SQL功能。 Sqlite不强制执行   外键而不是空约束。