SQLITE增量整数主键和独特的约束冲突
SQLite increment Integer Primary Key and Unique Constraint conflict
我有一个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。然后,假设该表包含两个行带有row
值2
和3
的行。如果它首先处理第一行,则它将尝试将该行的row
值设置为3
,但这会产生约束违规,因为该列受到唯一约束的约束,并且该列中的值3
已经有一个行。/p>
如何克服这个问题?
请勿修改PK值,尤其是不要修改替代 pks的值,该值基本上所有自动启动键均为。
或者,将行更新到临时表中,清除原始表,然后将更新的值重新复制到其中。但是,如果您有任何引用此PK的FKS,这可能会非常凌乱,因此请返回我带领的"请勿修改PK值"建议。
首先: '4'
不是表名。UPDATE
语句期望您编写的'4'
的表名。例如:
UPDATE table1 SET row = row + 1 WHERE row >= 2
第二:当显然不是作为主键而是作为更改的行号时,请不要使用row
作为主键(或唯一键)。创建一个可以用作该表的主要索引的单独列。
- 写入位置0x0000000C时发生访问冲突
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 函数作为模板参数,是否对返回类型强制约束
- 约束和显式模板实例化
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- IpOpt拒绝解决不受约束的问题
- 链表中写入访问冲突的未知原因
- C++中的openCV Mat访问冲突
- 使用C++模板时表达约束
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- 如何在 SCIP C++ 接口中获取 MILP 约束矩阵中的系数值
- C++尝试深度复制唯一指针时出现内存访问冲突
- 错误:使用通用引用的声明冲突
- 如何解决GTest和LibTorch联动冲突
- 两个运营商的一些奇怪的冲突<<
- 受约束的成员函数和显式模板实例化
- 如何在多个线程中创建 QSql数据库连接时防止名称冲突
- SQLITE增量整数主键和独特的约束冲突