スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

タグ :

   印刷ボタン       この記事に拍手する       このエントリーをはてなブックマークに追加

Return to page top

  • Comments (Close): -
  • TrackBack (Close): -

autoincrement

integer primary key を指定すると、そのカラムには自動で連番の値が格納されます。

さて、たとえばあるデータを削除して主キーに欠番が生じた場合、新たなデータの主キーは欠番が再利用されるでしょうか?

以下、accountテーブルの3番目のデータを削除して、再び同じデータを(idの設定をせず)格納した場合に、idの値がどうなるかを調べてみましょう。

delete from account where id=3 ;
insert into account (name, money) values('三郎', 3000);


テーブルを表示すると、三郎のidは3でした。

20111106_9

次郎で同じことをやってみた場合、新たな次郎のidは4になりました。

以上からして、integer primary key の場合、欠番が再利用される可能性があります。

しかし、情報を管理する上で、欠番は再利用したくない場合も多いかと思います。

そんなとき、カラムに対してinteger primary key を設定する時に autoincrement も合わせて記述すると、一度割り当てられた値は二度と使われないようにすることができます。

alter table account rename to temp;
create table account (id integer primary key autoincrement, name text, money integer);
insert into account (name, money) select name, money from temp;
drop table temp;
delete from account where id=3 ;
insert into account (name, money) values('三郎', 3000);


実行結果:
20111207_1

欠番3は再利用されずにidは4になりました。



sqlite_sequence


ここで、左のツリーを見ると、sqlite_sequence というテーブルが自動作成されているはずです。

20111207_2

select * from sqlite_sequence;
で表示してみます。

20111207_3

sqlite_sequenceテーブルには、過去に割り当てられたことのある最大の値が格納されており、主キーを自動で割り当てるときは、この値に1を加えた値を割り当てるだけで済みます。


関連記事
スポンサーサイト

タグ :

   印刷ボタン       この記事に拍手する       このエントリーをはてなブックマークに追加

Return to page top

Comments:

Comment Form
Only inform the site author.

Trackback+Pingback:

TrackBack URL for this entry
http://androidhacker.blog94.fc2.com/tb.php/82-a3876458
  • 閉じるボタン
レファレンス
月別アーカイブ
リンク
カテゴリ
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。