为什么我在SQLite3表中遇到UNIQUE约束失败

时间:2017-03-30 16:16:35

标签: linux sqlite constraints

我一直在寻找StackOverflow,SQLite.com和Google的帮助,但还没有找到我正在寻找的东西。

我需要将两个较旧的表组合成一个新表,但PRIMARY KEY和UNIQUE约束似乎互相争斗(一旦它到达INSERT语句,我得到一个Constraint Failed错误)。如果我删除UNIQUE约束,脚本将运行,但后来我有重复的CamIndex记录。

CREATE TABLE tmpTable(
RowID      INTEGER   PRIMARY KEY AUTOINCREMENT,
CamIndex   INTEGER   UNIQUE NOT NULL, 
LenIndex   INTEGER   NOT NULL,
CamDesc    TEXT,
LenDesc    TEXT
);

INSERT INTO tmpTable(
CamIndex,
LenIndex,
CamDesc,
LenDesc
)

SELECT
TblA.CAM_INDEX,
TblB.LEN_INDEX, 
TblA.CAM_DESC,
TblB.LEN_DESC

FROM TblA
LEFT JOIN TblB on TblA.CAM_INDEX = TblB.CAM_INDEX;

如何将CamIndex列设为UNIQUE并将RowID保留为主键?

这也不起作用:

CREATE TABLE tmpTable(
RowID      INTEGER   PRIMARY KEY AUTOINCREMENT,
CamIndex   INTEGER   NOT NULL, 
LenIndex   INTEGER   NOT NULL,
CamDesc    TEXT,
LenDesc    TEXT,
UNIQUE(CamIndex)
);

我使用SQLite,因此无法使用ALTER Table语句添加UNIQUE约束。

1 个答案:

答案 0 :(得分:1)

您对数据唯一性的假设无效。根据您在评论中提到的内容,SELECT语句的结果会针对CamIndexLenIndexCamDesc的不同组合生成相同的LenDesc。鉴于此,您无法在CamIndex上添加唯一约束。

您需要重新评估SELECT查询,以确保在限制表格之前没有从中获取虚假值。