是否可以引用sqlite_master
表的字段name
?类似这样的东西:
CREATE TABLE metadata (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT REFERENCES sqlite_master (name) ON DELETE CASCADE
UNIQUE
NOT NULL,
description TEXT
);
当我尝试执行这个脚本时,SQLiteStudio
返回错误消息SQL logic error
。我需要创建具有人类可读的表描述的表。我想把服务表sqlite_master
的字段name
作为表中的外键。
下面是发生的事情:
用作父键的列需要是父表的主键,或者有一个唯一的索引/约束。sqlite_master
表没有名称列这样的东西(而且不能在上面添加索引(,因此不能使用它。我不知道为什么在创建表时会出现逻辑错误,而不是像在普通表上一样在插入时出现外键不匹配错误:
sqlite> pragma foreign_keys = on;
sqlite> create table parent(id integer primary key, name text not null);
sqlite> insert into parent(name) values ('Bob');
sqlite> create table child(id integer primary key, name text references parent(name));
sqlite> insert into child(name) values ('Bob');
Error: foreign key mismatch - "child" referencing "parent"
sqlite> create unique index parent_idx_name on parent(name);
sqlite> insert into child(name) values ('Bob');
sqlite>
如果像默认情况下那样禁用了外键强制,那么您尝试的操作将被接受,但它不会起任何作用,并且如果您稍后打开FK并尝试对表执行操作,则会引发错误。