在我的 SQLite 数据库中,我创建了三个表,如下所示。
CREATE TABLE OBTTourHeader
(
TourHeaderCode INT PRIMARY KEY NOT NULL,
VehicleCode VARCHAR(10) NOT NULL,
LastMilage DOUBLE,
TourReference VARCHAR(20) NOT NULL,
TourFromDate TEXT NOT NULL,
TourToDate TEXT NOT NULL,
TourAssignTo VARCHAR(30) ,
DriverNmae VARCHAR(30) ,
AssistantName VARCHAR(30) ,
Porter1Name VARCHAR(30) ,
Porter2Name VARCHAR(30) ,
Porter3Name VARCHAR(30) ,
RouteCode INT,
Active CHAR(1) NOT NULL,
CreatedOn TEXT ,
CreatedBy CHAR(10),
UpdateOn TEXT,
Updateby CHAR(10)
);
CREATE TABLE OBTTourDetails
(
TourHeaderCode INT NOT NULL,
TourdetailCode INT NOT NULL,
VisitSequence INT NOT NULL,
LocationNmae VARCHAR(30) NOT NULL,
CityName VARCHAR(30) NOT NULL,
Type CHAR(1) NOT NULL,
Status CHAR(1) NOT NULL,
TypeColor CHAR(20) ,
statusColor CHAR(20) ,
Active CHAR(1) NOT NULL,
CreatedOn TEXT ,
CreatedBy CHAR(10),
UpdateOn TEXT,
Updateby CHAR(10),
FOREIGN KEY (TourHeaderCode) REFERENCES OBTTourHeader(TourHeaderCode),
PRIMARY KEY (TourHeaderCode , TourdetailCode)
);
CREATE TABLE OBTTourDropPickItems
(
TourHeaderCode INT NOT NULL,
TourdetailCode INT NOT NULL,
DropPickupItemCode INT NOT NULL,
Status CHAR(1) NOT NULL,
CreatedOn TEXT ,
CreatedBy CHAR(10),
UpdateOn TEXT,
Updateby CHAR(10),
FOREIGN KEY (TourHeaderCode) REFERENCES OBTTourHeader(TourHeaderCode),
FOREIGN KEY (TourdetailCode) REFERENCES OBTTourDetails(TourdetailCode),
PRIMARY KEY (TourHeaderCode, TourdetailCode, DropPickupItemCode)
);
我尝试使用以下声明输入记录。
INSERT INTO OBTTourDropPickItems (TourHeaderCode, TourdetailCode, DropPickupItemCode, Status, CreatedOn, CreatedBy)
VALUES ('1','1','1','1','21/01/2013','samantha');
它给我一个错误“外键不匹配”。
我无法弄清楚错误。 OBTTourDetails 表和 OBTTourHeader 表都包含记录。这里出了什么问题。对我而言似乎几乎没问题。帮我。谢谢!!!!
答案 0 :(得分:0)
您不能创建外键,即同一个表的主键。你在OBTTourDropPickItems
表中犯了这个错误。
<强>错误:强>
PRIMARY KEY (TourHeaderCode, TourdetailCode, DropPickupItemCode)
<强>解决方案:强>
TourHeaderCode INT NOT NULL REFERENCES OBTTourHeader,
TourdetailCode INT NOT NULL REFERENCES OBTTourDetails,
PRIMARY KEY (TourHeaderCode, TourdetailCode, DropPickupItemCode)
答案 1 :(得分:0)
通常,外键约束的父键是父表的主键。如果它们不是主键,则父键列必须共同受UNIQUE约束或具有UNIQUE索引。
您的OBTTourDetails(TourdetailCode)
列没有此类索引。