auの日記

プログラミング初心者の日記。(auはハンドルネームです)

SQLite3のAUTOINCREMENTについて

auです。
前回SQLite3でINTEGER PRIMARY KEYを設定しましたが、さらに、AUTOINCREMENTを合わせて指定すると、ただのINTEGER PRIMARY KEYとは違った挙動をします。

INTEGER PRIMARY KEYのみの場合

まず、INTEGER PRIMARY KEYだけのカラムを用意します。

CREATE TABLE user(id INTEGER PRIMARY KEY, name TEXT, address TEXT);
INSERT INTO user(name, address) VALUES("Sato", "東京");
INSERT INTO user(name, address) VALUES("Tanaka", "神奈川");
INSERT INTO user(name, address) VALUES("Saito", "埼玉");
SELECT * FROM user;
id          name        address
----------  ----------  ----------
1           Sato        東京
2           Tanaka      神奈川
3           Saito       埼玉

今回も、3つのデータを追加しました。
idは、順番に1,2,3と振られています。
3のデータを削除してみます。

DELETE FROM user WHERE id = 3;
SELECT * FROM user;
id          name        address
----------  ----------  ----------
1           Sato        東京
2           Tanaka      神奈川
sqlite>

3のデータが削除されました。もう1度データを追加してみます。

INSERT INTO user(name, address) VALUES("Goto", "群馬");
SELECT * FROM user;
id          name        address
----------  ----------  ----------
1           Sato        東京
2           Tanaka      神奈川
3           Goto        群馬

idは2の次の3が追加されました。

AUTOINCREMENTを入れてみる

AUTOINCREMENTを入れてやってみます。

CREATE TABLE user(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, address TEXT);

入れ方は簡単で、INTEGER PRIMARY KEYの後ろにAUTOINCREMENTを入れるだけです。
先ほどと同じようにデータをいれていきます。

INSERT INTO user(name, address) VALUES("Sato", "東京");
INSERT INTO user(name, address) VALUES("Tanaka", "神奈川");
INSERT INTO user(name, address) VALUES("Saito", "埼玉");
SELECT * FROM user;
id          name        address
----------  ----------  ----------
1           Sato        東京
2           Tanaka      神奈川
3           Saito       埼玉

先ほどと同じようにid=3を削除して、もう一度データを追加します。

DELETE FROM user WHERE id = 3;
INSERT INTO user(name, address) VALUES("Goto", "群馬");
SELECT * FROM user;
id          name        address
----------  ----------  ----------
1           Sato        東京
2           Tanaka      神奈川
4           Goto        群馬
sqlite>

id=3ではなく、id=4として追加されました。
これを利用すれば、以前に使用されたidが使用されることがなくなり、重複される心配がなくなります。
まだ開発系をしたことがないので、重複しないのがどれくらい重要なことなのか実感は持ててません。はやく開発をしてみたいです。