自动增量和减量整数字段在sqlite数据库中可用吗?

问题描述

| 我正在获取ID为Integer主键或整数的数据。 但是删除任何行后... 之后,如果我们选择查询显示所有内容。 但由于缺少一个ID,它会强制关闭。 我希望ID本身可以是
auto increment
decrement
。 当我在此之后删除记录的末尾(ig id = 7)时,我添加一行,则id必须为7而不是8。与当我删除间的某行(ig id = 3)时相同,则所有行自动由参加。 你的想法可以帮助我。     

解决方法

        大多数具有自动递增列的系统都会跟踪最后插入的值(或要插入的下一个值),并且即使从表中删除了最后一个已发布的数字,也不会重新发出数字(两次给相同的数字) 。 从您的要求来看,SQLite是另一个这样的系统。 如果系统中存在任何并发,那么这是有风险的,但是对于单用户,一次应用一次的系统,您可能会摆脱:
SELECT MAX(id_column) + 1 FROM YourTable
查找下一个可用值。根据SQLite的行为,您可以将其嵌入INSERT语句的VALUES列表中:
INSERT INTO YourTable(id_column,...)
    VALUES((SELECT MAX(id_column) + 1 FROM YourTable),...);
那可能行不通;您可能必须执行两次操作。请注意,如果存在任何并发,则两个语句形式是一个坏主意。主键唯一约束通常可以防止灾难,但是两个并发语句之一会失败,因为它试图插入另一个刚插入的值-因此它必须重试并希望达到最佳效果。显然,手机的并发性不如Web服务器,因此问题相应地不那么严重。不过要小心。 但是,总的来说,最好不要在序列中出现间隙而不必担心。通常不必担心它们。如果您必须担心差距,请不要让人们把差距放在第一位。或在执行删除操作以创建空白行时移动现有行以填补空白。最后,仍然留下删除操作,在添加新行时会产生间隙,这就是为什么最好克服“必须是连续的数字序列”心态的原因。自动递增可确保唯一性;它不保证连续性。