你能改变SQLite(Android)中的_id自动增量字段吗?

时间:2013-03-09 16:13:39

标签: android sqlite

我有一个带有SQLite的Android应用程序,并在创建表时使用以下行:

_id integer primary key autoincrement

我的问题是,如果我的用户想要,我可以对此行进行更新并更改_id吗?因此,例如,我将在DB中有两条记录:

1 My First Record
2 My Second Record

现在我的更新后,我想要像:

1 My First Record
38 My Second Record

SQLite是否允许这样做并轻松适应?即自动处理的下一个主键是#39?

3 个答案:

答案 0 :(得分:5)

作为documented,允许更改_id并正确更新自动增量序列。

试一试:

$ sqlite3
SQLite version 3.7.16 2013-01-11 09:58:54
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE MyTable(_id INTEGER PRIMARY KEY AUTOINCREMENT);
sqlite> INSERT INTO MyTable DEFAULT VALUES;
sqlite> INSERT INTO MyTable DEFAULT VALUES;
sqlite> UPDATE MyTable SET _id = 38 WHERE _id = 2;
sqlite> INSERT INTO MyTable DEFAULT VALUES;
sqlite> SELECT * FROM MyTable;
1
38
39

答案 1 :(得分:0)

如果你想做这些事情,你必须自己管理自动增量。 SQLite将允许您更改自动生成字段的值。另一种方法是添加另一个字段并使用它。

另外,如果有某种解决方法,我可以向你保证这不是一个好习惯。

答案 2 :(得分:0)

  1. 您绝不应该以这种方式修改主键,例如想到外键等.Sqlite不允许这样做。
  2. 除此之外,自动增量计数器存储在一个单独的表中,并且不知道你在做什么。即使允许更改主键,计数器也不会受到影响。