多条记录中的sqlite shift rowid 你好,我有一个SQLite DB,有很多记录,像10540条记录,它们是按创建时间排序的,我想像中间记录一样移动,喜欢自动地做< /P>

多条记录中的sqlite shift rowid 你好,我有一个SQLite DB,有很多记录,像10540条记录,它们是按创建时间排序的,我想像中间记录一样移动,喜欢自动地做< /P>,sqlite,shift,rowid,Sqlite,Shift,Rowid,例如: select * from table1 where id >= 8521; UPDATE Table1 SET id = id +1 ; 无法工作,我获取错误:结果:唯一约束失败: 因此,我想将所有记录从8521向上移动到最后一个记录,并在8520位置获得位置,例如,这样我就可以将我的记录插入表的那个位置。 甚至 id = select max(id)+1 无法工作如何将id从最后一条记录增加到所需的记录,以便在记录数据库中放置一个位置一个简单的update语句将失败,因为

例如:

select * from table1 where id >= 8521; 
UPDATE Table1 SET id = id +1 ;
无法工作,我获取错误:结果:唯一约束失败: 因此,我想将所有记录从8521向上移动到最后一个记录,并在8520位置获得位置,例如,这样我就可以将我的记录插入表的那个位置。 甚至

id = select max(id)+1

无法工作如何将id从最后一条记录增加到所需的记录,以便在记录数据库中放置一个位置一个简单的update语句将失败,因为它将尝试在主键中创建重复的值
您可以做的是:
首先将列更新为其应具有的值的负数:

update table1
set id = -(id + 1)
where id > 8520;
现在没有重复项,只需再次更新为正值:

update table1
set id = -id
where id < 0; 
更新表1
set id=-id
其中id<0;

这就可以了,但是任何类型的主键更新都是而不是推荐的做法

是列
id
autoincrement吗?这是一件很奇怪的事情。如果您能告诉我们为什么要这样做,我们可能会建议一个更好的解决方案。是的,id是自动递增的,假设用户bob在id=1处写了一些东西,然后用户john在id=2处写了另一个东西,以此类推。。。用户x在id=5411处写入,我想编辑id=5410并将john放在x之前,而不保留任何记录位置。例如,如果john在id=5410处写入,但忘记保存或做其他事情,他告诉db管理员,以便我可以为他编辑db并将其放在那个位置,我知道我可以手动执行此操作,方法是将记录id从8521设置为最后一条记录的NULL,然后使用reindex语句,并在表中插入id为8520的行,但如果需要,则无法处理要按创建时间对行进行排序,请将创建时间戳放在列中,并将其与order by一起使用。不要试图让rowid做一些事情,这并不意味着感谢你的回答,它奏效了。我并不总是这样做,我只是在被要求时才编辑,并帮助人们感谢他们的帮助