我试图插入 Subject
字段输入 Main_Standards
进入 Name
领域 Subjects
,它是引用 Subject
现场。
这是我的 Main_Standards
表格:
CREATE TABLE "Main_Standards" (
"ID" INTEGER NOT NULL UNIQUE,
"Subfield" TEXT NOT NULL,
"Domain" TEXT NOT NULL,
"Code" INTEGER NOT NULL UNIQUE,
"Standard_Type" TEXT NOT NULL,
"Assessment_Type" TEXT NOT NULL,
"Subject" TEXT,
"Subject_Reference" TEXT,
"Title" TEXT NOT NULL,
"Level" INTEGER NOT NULL,
"Credits" INTEGER NOT NULL,
"Grading_Scheme" TEXT NOT NULL,
"Status" TEXT NOT NULL,
"Expiry_Date" TEXT,
"Publication_Date" TEXT NOT NULL,
"CurrentVersion" INTEGER NOT NULL,
"Hyperlink" TEXT,
PRIMARY KEY("ID" AUTOINCREMENT)
)
这是我的 Subjects
table。
CREATE TABLE "Subjects" (
"ID" INTEGER NOT NULL UNIQUE,
"Name" TEXT NOT NULL UNIQUE,
"Subfield" TEXT NOT NULL,
"Selected" TEXT NOT NULL DEFAULT 'False',
FOREIGN KEY("Name") REFERENCES "Main_Standards"("Subject"),
PRIMARY KEY("ID" AUTOINCREMENT)
)
这是导致抛出错误的查询:
INSERT OR IGNORE INTO Subjects(Name, Subfield)
SELECT DISTINCT
Subject,
Subfield
FROM Main_Standards
WHERE Standard_Type = 'A';
错误本身:
Execution finished with errors.
Result: foreign key mismatch - "Subjects" referencing "Main_Standards"
At line 1:
INSERT OR IGNORE INTO Subjects(Name)
SELECT DISTINCT
Subject
FROM Main_Standards
WHERE Standard_Type = 'A';
1条答案
按热度按时间jjhzyzn01#
根据文件:
通常,外键约束的父键是父表的主键。如果它们不是主键,则父键列必须共同受唯一约束或具有唯一索引。
Main_Standards.Subject
不是表的pk,也没有任何东西表明表上有唯一的索引。因此,当您尝试将其用作父密钥时,会出现一个错误。不相关,但是
PRIMARY KEY
从定义上讲,这些都是独一无二的。您不需要同时指定UNIQUE
和他们在一起。这样做很悲观,因为它创建了一个冗余索引,每次修改表时都必须更新该索引。