你可以更改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?
答
作为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将而不是允许您更改自动生成字段的值。另一种方法是添加另一个字段并使用它。
此外,如果有某种解决方法,我可以向你保证这不是一个好的做法。
答
- 不应该以这种方式修改主键,例如,想到外键等Sqlite不会允许这样做。
- 除此之外,自动递增计数器存储在一个单独的表中,不知道你在做什么。即使允许更改主键,计数器也不会受到影响。
我不知道,如果这样的事情是可以或不可以,但你不应该更改值,即使它可能。要实现这样的事情,请考虑创建您自己的ID字段。 – yugidroid 2013-03-09 16:53:39