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

问题描述:

当我运行这些查询:为什么这个SQL查询不会返回任何错误?

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'); 

因为我将不具有在参考表中的对应值的元组应该返回一个错误。但是当我运行这些命令,这个元组inetsts成功。这个查询有什么问题? 我的DBMS是sqlite,我正在使用sqliteman。

你应该学会如何enable foreign key support

引用文档:

为了SQLite中使用外键约束,图书馆必须 既不SQLITE_OMIT_FOREIGN_KEY或SQLITE_OMIT_TRIGGER 定义编译。如果定义了SQLITE_OMIT_TRIGGER,但SQLITE_OMIT_FOREIGN_KEY 不是,那么SQLite的行为与之前版本3.6.19- 的行为相同,可以使用foreign_key_list查询外键定义,但可以使用PRAGMA 查询,但不会强制实施外键约束。在此配置中,PRAGMA foreign_keys命令是 no-op。如果定义了 OMIT_FOREIGN_KEY,则外键定义甚至不能解析 (试图指定外键定义是语法 错误)。

还可以阅读sqliteman constraint triggers

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