0

我不明白为什么会出现错误,请您解释一下吗?

sqlite> create table a (id text, val text);
sqlite> create table b (bid text, ref text, foreign key(ref) references a(text));
sqlite> insert into a values("1", "one");
sqlite> insert into b values("1", "one");
Error: foreign key mismatch
4

3 回答 3

4

我认为你在这里有一些有点奇怪的事情。我会这样写:

create table a (id text, val text, primary key(id));
create table b (bid text, ref text, foreign key (ref) references a(id));
insert into a values("1", "one");
insert into b values("one", "1");

在 A 上创建一个主键,然后从 B 中引用它;不是我引用字段名称而不是外键中的数据类型。

不匹配是因为您试图“匹配”one1. 您应该已经切换了 B 插入中的值。

SQL小提琴

于 2013-08-22T12:32:46.367 回答
2

您没有text在表 a 中调用的字段..

您可能打算这样做:

sqlite> create table a (id text, val text primary key(id));
sqlite> create table b (bid text, ref text, foreign key(ref) references a(val));
sqlite> insert into a values("1", "one");
sqlite> insert into b values("1", "one");
于 2013-08-22T12:32:22.673 回答
1

您可能会收到此错误,因为您尚未在table a.Also 中声明主键。此外,在引用中您必须提及主键列名而不是数据类型。例如

sqlite> create table a (id text PRIMARY KEY, val text);
                               // ^---Declared Primary key
sqlite> create table b (bid text, ref text, foreign key(ref) references a(text));
                                          refer primary key column--------^      
于 2013-08-22T12:37:40.727 回答