linux - 为什么我的 SQLite3 表中出现 UNIQUE Con​​straint Failure

标签 linux sqlite constraints

我一直在 StackOverflow、SQLite.com 和 Google 上搜索以寻求帮助,但还没有找到我要找的东西。

我需要将两个旧表组合成一个新表,但 PRIMARY KEY 和 UNIQUE 约束似乎相互冲突(一旦进入 INSERT 语句,我就会收到约束失败错误)。如果我删除 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 列成为唯一列并将 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 约束。

最佳答案

您关于数据唯一性的假设是无效的。根据您在评论中的评论,您的 SELECT 语句的结果针对 LenIndexCamDesc 的不同组合生成相同的 CamIndex LenDesc。鉴于此,您不能对 CamIndex 设置唯一约束。

您需要重新评估您的 SELECT 查询以确保在您可以约束您的表之前不会从中获取虚假值。

关于linux - 为什么我的 SQLite3 表中出现 UNIQUE Con​​straint Failure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43123220/

相关文章:

ios - Swift 约束和 anchor

sql - 如何处理 SQL Server 幽灵 FK 约束?

linux - 在solaris中获取昨天的日期

Android 项目生命周期 - 在 Activity 生命周期 (Activity.onCreate()) 之前

c++ - 如何在 QTextEdit 面板中附加选择查询结果?

android - 我是加入、循环查询还是以其他方式从 SQLiteDatabase 检索嵌套表?

c - 来自 munmap 的 Linux 错误

php - "Fatal error: Class ' Memcached ' not found"尝试在 Ubuntu 中安装 Memcache 时

linux - 如何在AFS中使用Keytab对kerberos进行身份验证?

ios - 将 UITableViewCell 的垂直压缩阻力优先级设置为 749