当我运行这些查询时:
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。
答案 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不强制执行 外键而不是空约束。