goo blog サービス終了のお知らせ 

職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

SQLiteのAUTOINCREMENT制約について

2020年06月06日 | sqlite
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>

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
«  ROWIDの参照とINTEGER PRIMA... | トップ | SQLiteのNOT NULL 制約 »
最新の画像もっと見る

コメントを投稿

sqlite」カテゴリの最新記事