0

当我运行这些查询时:

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

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

4

1 回答 1

1

您应该学习如何启用外键支持

引用文档:

为了在 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 约束触发器

还有一项不受支持的 SQL 功能。Sqlite 不强制外键和非空约束。

于 2013-05-13T09:16:18.553 回答