SQLite3でシリアル型(Auto Increment)の初期値(Start Value)を変更する

SQLite3で新たにautoincrementが追加になった。今までの最大値+1ではなく、ユニークな数字が使われる他のDBと同じ機能。sequenceだったりserialだったりauto_incrementだったり。

でも必ず1からスタートして欲しい事もない。そんな使い方をしたいときもある。あり得る。そんなときは、sqlite_sequence(name, seq)ってテーブルがあるので、そのnameに該当するテーブル名、seqに初期値をいれて置けば次回インクリメントされるときにその値が使われるようになる。

例えば、テーブル:tt(code integer primary key autoincrement, name, text)なんてテーブルがあって、codeを10000からスタートさせたい時

sqlite> select * from sqlite_sequence;
##目的のテーブル名が表示されなければinsert。表示されればupdateで登録。
sqlite> insert into sqlite_sequence values('tt', 9999);
sqlite> update sqlite_sequence set seq = 9999 where name = 'tt';
sqlite> insert into tt values(null, 'hoge');
sqlite> select * from tt;
10000|hoge

※注意:seq+1されるので、初期値−1にしておくこと。