我一直在尝试将数据插入到我使用引用另一个表的外键创建的新表中,但它似乎不起作用,即使我在另一个表中使用了相同的内容。
例如,当我尝试使用视频中存在的唯一 ID
Insert into Chapters(video_id) VALUES (470114);
时,显示的唯一错误是模糊的“外键不匹配 - “章节”引用“视频””
CREATE TABLE "Videos" (
[id] INTEGER,
[title] text NOT NULL,
[yr] INT NOT NULL,
[runtime] INT NOT NULL,
[descp] text NULL,
[cats] text NOT NULL,
[creators] text NOT NULL,
[creator_roles] text NULL,
[thumbnail] BLOB NOT NULL DEFAULT (x''),
[file_location] text NOT NULL)
CREATE TABLE "Chapters" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
video_id INTEGER,
chapter_number INTEGER,
name TEXT,
runtime INTEGER,
FOREIGN KEY (video_id) REFERENCES "Videos"(id) )
我真正不明白的是,还有另一个表“角色”,它工作得很好,并且具有与章节相同的外键:
CREATE TABLE "Roles" (
id INTEGER PRIMARY KEY,
vd_id INTEGER,
person_id INTEGER,
person_role TEXT,
FOREIGN KEY (vd_id) REFERENCES "Videos"(id),
FOREIGN KEY (person_id) REFERENCES "Person"(id) )
如果 SQLite 中有一个约束阻止两个或多个表引用另一个表中的同一列,我不会意识到这一点。这是一个我实在无法理解的谜题。感谢您的帮助!
不能发表评论,我来回答。
tl;dr: 您的
Videos
表需要将 id
声明为 PRIMARY KEY
或作为 UNIQUE
键,或者您可以禁用 foreign keys
(不推荐)
经过快速谷歌搜索后,我找到了thisStackOverflow答案。
引用答案:
来自所需和建议的数据库索引:
通常,外键约束的父键是父表的主键。如果它们不是主键,则父键列必须共同受到 UNIQUE 约束或具有 UNIQUE 索引。
他们甚至提供了演示。
这是我的演示。 如果删除
PRIMARY KEY
,您将看到错误。