SQLite | テーブル | AUTOINCREMENTの割り当て規則

INTEGER PRIMARY KEYは通常、現在の最大値に1を加えるため、削除した最大値が再利用されることがある。AUTOINCREMENTを加えると、過去に割り当てた最大値に1を加える。

CREATE TABLE table_name (column_name INTEGER PRIMARY KEY AUTOINCREMENT, ...);

AUTOINCREMENTなし:

create table user (id integer primary key, name text);
insert into user (name) values ('devkuma');
insert into user (name) values ('kimkc');
insert into user (name) values ('araikuma');
delete from user where id = 3;
insert into user (name) values ('happykuma');

最後の行には現在の最大値2の次である3が再び割り当てられる。

AUTOINCREMENTあり:

create table user2 (id integer primary key autoincrement, name text);
insert into user2 (name) values ('devkuma');
insert into user2 (name) values ('kimkc');
insert into user2 (name) values ('araikuma');
delete from user2 where id = 3;
insert into user2 (name) values ('happykuma');

過去の最大値が3なので、最後の行には4が割り当てられる。

最大割り当て値の確認

状態はsqlite_sequenceに保存される。

sqlite> .schema sqlite_sequence
CREATE TABLE sqlite_sequence(name,seq);
select * from sqlite_sequence where name = 'user2';
-- user2|4