SQLite错误 - 外键不匹配

时间:2014-01-21 08:31:13

标签: android sql sqlite

在我的 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');

它给我一个错误“外键不匹配”。 enter image description here

我无法弄清楚错误。 OBTTourDetails 表和 OBTTourHeader 表都包含记录。这里出了什么问题。对我而言似乎几乎没问题。帮我。谢谢!!!!

2 个答案:

答案 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)

documentation说:

  

通常,外键约束的父键是父表的主键。如果它们不是主键,则父键列必须共同受UNIQUE约束或具有UNIQUE索引。

您的OBTTourDetails(TourdetailCode)列没有此类索引。