PostgreSQL で連番の数字のフィールドを作る方法 (sequence について)
データベースでデータを管理する上で、何らかの連番の数字を割り振って、一意の ID とするのは、よくある手法かと思います。
例えば「最近飲んだお酒リスト」なんていうテーブルがあったら、
LiquorID | LiquorName | LiquorDate |
1 | モスコミュール | 2007-11-26 |
2 | 白ワイン | 2007-11-27 |
3 | モスコミュール | 2007-11-28 |
4 | モスコミュール | 2007-11-29 |
5 | ウォッカ | 2007-11-30 |
こんな感じで、「LiquorID」に数字を連番で振っていく、というケースですね。
こういう風に、順番に番号を振っていく際に使うのが、sequence(シーケンス)というものです。
sequence (シーケンス) の作成
sequence (シーケンス) は、「create sequence シーケンス名 オプション」という SQL文で、作成できます。
例えばシンプルに、1 からスタートして、1 ずつ増加していく「LiquorID_seq」シーケンスを作る場合は、下記のような SQL文になります。
create sequence LiquorID_seq;
初期値を 1 ではなく、例えば 10001 にしたい場合は、「start」というオプションをつけて、
create sequence LiquorID_seq start 10001;
とやれば OK 。
sequence (シーケンス) を使ったテーブルへのデータ追加 (insert文)
とりあえず、連番の数字を管理するためのシーケンスはできあがりました。
次は、実際にこのシーケンスで管理している数字を、テーブルに反映しないといけないわけです。
前述の「最近飲んだお酒リスト」の例だと、「2007年12月1日はビールを飲んだ」場合、このテーブルに 6番目のデータとして、
- LiquorID ⇒ 6
- LiquorName ⇒ ビール
- LiquorDate ⇒ 2007-12-01
を追加する必要があります。
で、LiquorID の連番の数字は先ほど作成したシーケンス「LiquorID_seq」で管理しているので、そのデータを参照する必要があります。
シーケンスで管理している連番の数字の「次の番号」を取得する際には「nextval」という関数を利用します。
具体的には、
insert into LiquorList (LiquorID, LiquorName, LiquorDate)
values (nextval('LiquorID_seq'), 'ビール', '2007-12-01');
という SQL文でデータを追加すれば、自動的にLiquorIDには「次の数字」である 6 が入るわけです。
nextval 関数を呼び出したら、自動的に、参照したシーケンス内の数値は「次の数字」に更新されるので、楽チンです。
もっと楽に連番を発行する方法
実は、create table 文でテーブルを作成する際に、フィールドに対して「serial」というデータ型を指定すれば、勝手にシーケンスを作って、データ挿入時も勝手に連番を発行してくれます。
なので今回の例の場合でも、最初にテーブルを作る際に、
create table LiquorList (
LiquorID serial PRIMARY KEY,
LiquorName text NOT NULL,
LiquorDate timestamp NOT NULL);
みたいな感じにしておけば、勝手に LiquorList_LiquorID_seq という名前のシーケンスも同時に作成してくれます。
さらに、その後テーブルにデータを追加する際も、
insert into LiquorList (LiquorName, LiquorDate) values ('ソルティドッグ','2007-12-02');
という風に、LiquorID には何も指定せずに insert しても、自動的に LiquorID には LiquorList_LiquorID_seq の「次の数字」が入ってくれます。
凄く楽です。
- 関連するブログ記事
-
- カテゴリー
- PostgreSQL
- タグ
- PostgreSQL | RDBMS | sequence | serial型 | SQL | コマンドライン | シェル
- 現在位置
- TOP > Web制作技術 > PostgreSQL > PostgreSQL で連番の数字のフィールドを作る方法 (sequence について)
- 前のブログ記事
- PostgreSQLで複数のテーブルを結合して処理する方法 [2007年11月26日 03:15]
- 次のブログ記事
- 「TMG I」 - TMG [2007年12月 2日 19:46]
コメント(16)
amgodn http://paydayloansusatrg.com/ check out this site
http://www.montedentistry.com/?10.phpOakley Fives Squared Sunglasses Cheap
luukdyf http://paydayloansqdq.com/ payday loans
kqfdzk http://paydayloansnxk.com/ payday loans
ekqnjz http://paydayloansnxy.com/ fast payday loans
vvyniy http://zefvwq.com/
You've superb information in this case.
Hello!
Hello!
Hello!
Hello!
Hello!
Hello!
Hello!
Hello!
Wow, lovely website. Thnx ...
コメントする