SQLITE增量整数主键和独特的约束冲突

SQLite increment Integer Primary Key and Unique Constraint conflict

本文关键字:约束 冲突 整数 SQLITE      更新时间:2023-10-16

我有一个SQLITE数据库。当编写移动行函数(将行从一个表移动到另一个表)时,我需要有一个查询,以增量使用名称"行"的列,这是整数主键,但是存在错误。在我的任务中使用Row索引至关重要。例如,情况是WHERE row >= 2,因为我将行从其他表插入位置2。

"UPDATE '4' SET row = row + 1 WHERE row >= 2"

Error("19", "Unable to fetch row", "UNIQUE constraint failed: 4.row")

问题的原点WHERE row >= 2"部分。如何克服这个问题?

问题的起源WHERE row >= 2"部分。

我倾向于不同意。问题不是在使用哪些行更新,而是使用它们更新的 order

很可能SQLite会以ROWID顺序处理行,这几乎可以肯定也会增加row列的顺序,因为该列是自动插入的PK。然后,假设该表包含两个行带有row23的行。如果它首先处理第一行,则它将尝试将该行的row值设置为3,但这会产生约束违规,因为该列受到唯一约束的约束,并且该列中的值3已经有一个行。/p>

如何克服这个问题?

请勿修改PK值,尤其是不要修改替代 pks的值,该值基本上所有自动启动键均为。

或者,将行更新到临时表中,清除原始表,然后将更新的值重新复制到其中。但是,如果您有任何引用此PK的FKS,这可能会非常凌乱,因此请返回我带领的"请勿修改PK值"建议。

首先: '4'不是表名。UPDATE语句期望您编写的'4'的表名。例如:

UPDATE table1 SET row = row + 1 WHERE row >= 2

第二:当显然不是作为主键而是作为更改的行号时,请不要使用row作为主键(或唯一键)。创建一个可以用作该表的主要索引的单独列。