SQLiteのAUTOINCREMENT制約について
【開発環境】
OS::Win10(64ビット)
コマンドプロンプト
【AUTOINCREMENT制約について】
①INTEGER PRIMARY KEY制約のみ場合、
データを追加したり、削除したりしてみる
C:\Users\shyok>cd D:\pg\sqlite3
C:\Users\shyok>d:
D:\pg\sqlite3>sqlite3 D:\pg\sqlite3\myfriend.sqlite3
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite>
データ表示
sqlite> .header on
sqlite> .mode column
sqlite> select * from user;
id name
---------- ----------
1 Andou
2 Honda
3 Yamashita
sqlite>
ID=3のデータを削除
sqlite> delete from user where id = 3;
sqlite> select * from user;
id name
---------- ----------
1 Andou
2 Honda
sqlite>
再び、データを追加する
sqlite> insert into user(name) values('Ueda');
sqlite> select * from user;
id name
---------- ----------
1 Andou
2 Honda
3 Ueda
sqlite>
このように以前に一度別のデータに割り当てられた値であっても関係無く最大の値に 1 を加えた値がカラムに設定されてしまう。
■ AUTOINCREMENT 制約を合わせた場合
sqlite> create table user2(id integer primary key autoincrement, name text);
sqlite> insert into user2(name) values('Harada'); insert into user2(name) values('Yamada'); insert into user2(name) values('Tani');
sqlite>
sqlite> select * from user2;
id name
---------- ----------
1 Harada
2 Yamada
3 Tani
sqlite>
sqlite> delete from user2 where id = 3;
sqlite> select * from user2;
id name
---------- ----------
1 Harada
2 Yamada
sqlite>
この時 INTEGER PRIMARY KEY AUTOINCREMENT を設定してあるカラムに値を指定しない場合
対象のカラムに今までに格納されたことのある最大の値(現在は 3 )に 1 を加えた値が自動的に設定されるため 4 が格納されます。
sqlite> insert into user2(name) values('Ueda');
sqlite>
sqlite> select * from user2;
id name
---------- ----------
1 Harada
2 Yamada
4 Ueda
sqlite>
【カラムに格納されたことのある最大の値】
sqlite> .schema sqlite_sequence
CREATE TABLE sqlite_sequence(name,seq);
sqlite> select * from sqlite_sequence where name = 'user2';
name seq
---------- ----------
user2 4
sqlite>
※コメント投稿者のブログIDはブログ作成者のみに通知されます