我在 sqlite 中有一个带有自动增量主键的表。假设我的表中有这些记录:
1 hi
2 hello
3 bye
4 goodbye
如果我删除再见并添加另一条记录,新记录的 id 将为 5。但如果我删除再见并添加新记录,新记录的 id 将为 4。这样我将失去对最后一条记录的跟踪如果被一遍又一遍地删除和添加。无论如何我可以将新记录设为 5 而不是 4?
我在 sqlite 中有一个带有自动增量主键的表。假设我的表中有这些记录:
1 hi
2 hello
3 bye
4 goodbye
如果我删除再见并添加另一条记录,新记录的 id 将为 5。但如果我删除再见并添加新记录,新记录的 id 将为 4。这样我将失去对最后一条记录的跟踪如果被一遍又一遍地删除和添加。无论如何我可以将新记录设为 5 而不是 4?
你描述的是一个声明为的列INTEGER PRIMARY KEY
。
你想要的是INTEGER PRIMARY KEY AUTOINCREMENT
.
例子:
sqlite> CREATE TABLE MyTable(ID INTEGER PRIMARY KEY AUTOINCREMENT);
sqlite> INSERT INTO MyTable DEFAULT VALUES;
sqlite> INSERT INTO MyTable DEFAULT VALUES;
sqlite> DELETE FROM MyTable WHERE ID = 2;
sqlite> INSERT INTO MyTable DEFAULT VALUES;
sqlite> SELECT * FROM MyTable;
1
3
为此,您只需编辑记录并说明它最初的记录编号。在 PHPmyadmin 中很容易做到,但不是在代码中。
让我们看一下 INTEGER PRIMARY KEY AUTOINCREMENT 定义:
在 INSERT 中,如果 ROWID 或 INTEGER PRIMARY KEY 列没有显式地给定一个值,那么它将自动填充一个未使用的整数,通常比当前使用的最大 ROWID 多一个。无论是否使用了 AUTOINCREMENT 关键字。
所以你应该忘记 INTEGER PRIMARY KEY AUTOINCREMENT 来实现你想要的。相反,你可以创建一个列 myKey,并使用一个静态方法设置该列的值,该方法保存表中插入的行数。