我的 SQLite 3 具有以下设置(简化):
create table Location(LocationId integer not null,
LocationCode text not null,
primary key(LocationId),
unique(LocationCode));
上表由部门参考:
create table Department(DepartmentId integer not null,
LocationId integer not null,
DepartmentCode text not null,
primary key(LocationId, DepartmentCode),
foreign key(LocationId) references Location(LocationId));
上表被 Child 引用:
create table Event(EventId integer not null,
LocationId integer not null,
unique(LocationId, EventDate),
primary key(eventId),
foreign key(LocationId) references Location(LocationId));
上表参考表位置:
create table Parent(ParentId integer not null,
EmailAddress text not null,
primary key(ParentId),
unique(EmailAddress));
上表被表 Child 引用:
create table Child(ChildId integer not null,
ParentId integer not null,
ChildCode text not null,
DepartmentId integer not null,
primary key(ChildId, ParentId),
foreign key(ParentId) references Parent(ParentId),
foreign key(DepartmentId) references Department(DepartmentId));
表子是我要从中删除的那个。
此时,整个数据库是空的,并且有“pragma foreign_keys=ON”。
Child
在测试脚本以清除数据库时,我在从具有外键的空表中删除(也是空的)表时遇到错误Parent
。
当我发出命令delete from child
时(虽然已经为空),SQLite3 会返回错误消息“外键不匹配”。
这是删除脚本的重要部分:
delete from Child;
delete from Parent;
delete from Event;
delete from Department;
delete from Location;
我在这里看到了一些关于暂时禁用外键支持的帖子,但这对我来说没有意义。这使得实现外键关系的整个过程变得不必要。