gpt4 book ai didi

sql - 为什么我得到外键不匹配?

转载 作者:行者123 更新时间:2023-12-03 18:33:01 28 4
gpt4 key购买 nike

我不知道为什么我的外键与下面的 sqlite 不匹配:

PRAGMA foreign_keys=ON;

CREATE TABLE a (
id INT NOT NULL,
PRIMARY KEY (id));

CREATE TABLE b (
a_id INT NOT NULL,
id INT NOT NULL,
PRIMARY KEY (a_id, id),
FOREIGN KEY (a_id) REFERENCES a(id));

CREATE TABLE c (
b_id INT NOT NULL,
id INT NOT NULL,
PRIMARY KEY (b_id, id),
FOREIGN KEY (b_id) REFERENCES b(id));

insert into a VALUES (1);
insert into b VALUES (1, 2);
insert into c VALUES (2, 3);

最后一行导致:
Error: foreign key mismatch - "c" referencing "b"

我究竟做错了什么?

最佳答案

b的定义是:

CREATE TABLE b (
a_id INT NOT NULL,
id INT NOT NULL,
**PRIMARY KEY (a_id, id),**
FOREIGN KEY (a_id) REFERENCES a(id)
);

您已经定义了一个复合主键。也就是说,主键中有多个列。任何引用都需要使用定义的所有键。所以你需要一个 a_id供引用:
CREATE TABLE c (
b_id INT NOT NULL,
id INT NOT NULL,
a_id INT,
PRIMARY KEY (b_id, id),
FOREIGN KEY (a_id, b_id) REFERENCES b(a_id, id)
);

这也是我觉得复合主键很麻烦的原因之一。您可以为任何表定义一个合成主键——基本上,一个自动递增的列。这适用于外键引用。

关于sql - 为什么我得到外键不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49426181/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com