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が使用されることがなくなり、重複される心配がなくなります。
まだ開発系をしたことがないので、重複しないのがどれくらい重要なことなのか実感は持ててません。はやく開発をしてみたいです。