我正在使用 id 获取我的数据,它是整数主键或整数。
但删除任何行后...
之后,如果我们进行选择查询以显示所有内容。
但它会关闭,因为缺少一个 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), ...);
那可能行不通;您可能必须将其作为两个操作来执行。请注意,如果有任何并发,这两个语句的形式是一个坏主意TM。主键唯一约束通常可以防止灾难,但是两个并发语句之一失败,因为它试图插入另一个刚刚插入的值 - 所以它必须重试并希望最好。显然,手机的并发性比网络服务器少,因此问题相应地不那么严重。但小心点。
不过,总的来说,最好让间隙出现在序列中而不用担心它。通常不必担心它们。如果您必须担心差距,请不要让人们首先制造它们。或者,当您执行删除创建行时,移动现有行以填补空白。当添加新行时,这仍然会在最后留下删除创建间隙,这就是为什么最好克服“它必须是一个连续的数字序列”的心态。自增保证唯一性;它不保证连续性。