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