PostgreSQL で連番の数字のフィールドを作る方法 (sequence について)

2007年12月 1日 23:59 PostgreSQL で連番の数字のフィールドを作る方法 (sequence について)

データベースでデータを管理する上で、何らかの連番の数字を割り振って、一意の ID とするのは、よくある手法かと思います。

例えば「最近飲んだお酒リスト」なんていうテーブルがあったら、

LiquorList
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 の「次の数字」が入ってくれます。
凄く楽です。

阿部辰也へのお仕事のご依頼・お問合せはこちら

Twitter始めました。Followはお気軽にどうぞ。

関連するブログ記事
スポンサード リンク
カテゴリー
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]

トラックバック(0)

このブログ記事に対するトラックバックURL:

コメント(16)

check out this site [2013年10月15日 13:13]

amgodn http://paydayloansusatrg.com/ check out this site

Oakley Antix Sunglasses Cheap [2014年9月 7日 19:11]

http://www.montedentistry.com/?10.phpOakley Fives Squared Sunglasses Cheap

payday loans [2014年11月28日 18:10]

luukdyf http://paydayloansqdq.com/ payday loans

payday loans [2015年7月 9日 22:34]

kqfdzk http://paydayloansnxk.com/ payday loans

fast payday loans [2015年8月14日 03:25]

ekqnjz http://paydayloansnxy.com/ fast payday loans

hello [2015年9月24日 15:13]
poker [2016年6月18日 15:59]

You've superb information in this case.

buy_cialis [2016年7月 2日 16:23]

Hello!

buy_viagra [2016年7月 2日 16:24]

Hello!

cialis [2016年7月 2日 16:24]

Hello!

viagra [2016年7月 2日 16:25]

Hello!

buy [2016年9月 5日 22:09]

Hello!

for [2016年9月 5日 22:10]

Hello!

buy [2016年9月 5日 22:11]

Hello!

for [2016年9月 5日 22:12]

Hello!

viagra_jellylAI [2017年1月25日 22:07]


Wow, lovely website. Thnx ...

コメントする


画像の中に見える文字を入力してください。

 

このブログについて

阿部辰也

Webコンサルタントやシステムエンジニア、執筆業などをやっている、グッドホープ代表・阿部辰也のブログです。
Web技術系のTipsから仕事の話、趣味の話まで色々と。
人生は所詮生まれてから死ぬまでの壮大な暇つぶし。
だったら有意義に暇をつぶして生きましょー。

阿部辰也へのお仕事のご依頼・問合せはこちらからどうぞ。

Twitter: @t_abe
読書メーター: ID:Tatsuya

このブログのサイトマップ
このブログのはてなブックマーク数

Feed/RSS購読

タグクラウド

最近のトラックバック

阿部辰也の著書

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

頑張って書いたのに、出版後すぐに出版社が倒産して印税も貰えずじまいで俺涙目(笑)。

Powered by Movable Type 5.02

スポンサード リンク

はてなブックマーク



あわせて読みたい

t-abeの今読んでる本

t-abeの最近読んだ本

t-abeの今やってるゲーム

t-abeの最近やったゲーム