你可以更改SQLite(Android)中的_id autoincrement字段吗?

问题描述:

我有SQLite的Android应用程序,并在创建表时,请使用以下行:你可以更改SQLite(Android)中的_id autoincrement字段吗?

_id integer primary key autoincrement 

我的问题是,我可以做这行的更新,如果我的用户想改变_id?因此,举例来说,我有两个记录在数据库:

1 My First Record 
2 My Second Record 
我更新后

现在,我想是这样的:

1 My First Record 
38 My Second Record 

威尔的SQLite允许这一点,并容易适应?即自动处理的下一个主键将是#39?

+0

我不知道,如果这样的事情是可以或不可以,但你不应该更改值,即使它可能。要实现这样的事情,请考虑创建您自己的ID字段。 – yugidroid 2013-03-09 16:53:39

作为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 

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

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

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