如何参考sqlite_master';谁的领域?
可以参考如何参考sqlite_master';谁的领域?,sql,sqlite,Sql,Sqlite,可以参考sqlite\u master表的字段name?大概是这样的: CREATE TABLE metadata ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT REFERENCES sqlite_master (name) ON DELETE CASCADE UNIQUE NOT NULL,
sqlite\u master
表的字段name
?大概是这样的:
CREATE TABLE metadata (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT REFERENCES sqlite_master (name) ON DELETE CASCADE
UNIQUE
NOT NULL,
description TEXT
);
当我尝试执行此脚本时,然后返回错误消息
SQL逻辑错误。我需要创建一个具有可读性的表描述的表。我想在我的表中将服务表的字段name
作为外键sqlite\u master
发生的事情如下:
用作父键的列需要是父表的主键,或者具有唯一的索引/约束。sqlite\u master
表的name列没有这样的内容(您不能在其上添加索引),因此无法使用它。我不知道为什么在创建表时会出现逻辑错误,而不是像在普通表上一样在插入时出现外键不匹配错误,不过:
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>
如果像默认情况下一样禁用了外键强制,您尝试的内容将被接受,它只是不起任何作用,如果您稍后打开FKs并尝试处理表,则会引发错误。您的代码运行:。这回答了你的问题吗?@GordonLinoff不,它在语法上是正确的,但不适用于内部表sqlite\u master
,其中列出了所有数据库表。“不起作用”是什么意思?@Shawn它的意思是返回错误,当我尝试运行此sql脚本时。如果没有引用sqlite\u master(name)
它的工作。@上面的Shawn脚本,错误SQL逻辑错误
。您也无法在sqlite\u master
事件上创建触发器,因此无法以这种方式更新表。我想你运气不好。谢谢你,现在我明白了。我将创建没有外来关系的名称文本
。