如何参考sqlite_master的字段?



是否可以引用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并尝试对表执行操作,则会引发错误。

最新更新