連番型
PosgtreSQL で利用できるデータ型の中で連番型の使い方について解説します。連番型を設定したカラムには自動で連続する値が格納されていきます。連番型には smallserial, serial, bigserial の3つのデータ型が存在します。
(Last modified: )
連番型の使い方
連番型には扱える数の範囲が異なる 3 つのデータ型があります。
smallserial 2バイト 1から32767 別名:serial2 serial 4バイト 1から2147483647 別名:serial4 bigserial 8バイト 1から9223372036854775807 別名:serial8
連番型が設定されたカラムが含まれるテーブルにデータを追加する場合、連番型のカラムには直接値を指定するのではなくデフォルト値が格納されるようにしてください。すると自動的に今まで格納されてきた値よりも大きい値(通常は 1 大きい値)が自動で格納されます。(MySQL でいうところのカラムに AUTO_INCREMENT を設定したものと似ています)。
※ 連番型は内部的にシーケンスを利用して実装されています。
例として次のようなテーブルを作成しました。
create table myfriends (id serial, name varchar(10), address varchar(10));
それではテーブルにデータを追加します。 id カラムのデータ型は連番型の serial ですので、 id には値を指定せずにデータを追加します。
insert into myfriends (name, address) values ('Kudou', 'Kyoto');
それでは myfriends テーブルのデータを取得して確認してみます
select * from myfriends;
id カラムには 最初の値である 1 が格納されています。
それではあと 3 つほどデータを追加します。
insert into myfriends (name, address) values ('Honda', 'Tokyo'), ('Etou', 'Osaka'), ('Numata', 'Tokyo');
再度 myfriends テーブルのデータを取得して確認してみます
id カラムには自動的に連続した値が格納されており、 2、 3、 4 の値が格納されています。このように連番型のデータ型をカラムに設定した場合、デフォルトの値を指定すると連続した値が自動的に格納されます。(なおあくまで前回格納されたよりも大きい値が格納されるだけで、必ず連続した値になるわけではありません)。
連番型が設定されたカラムに値を指定してデータを追加する
連番型が設定されたカラムにデフォルト値が格納されるようにデータを追加すると、自動的に連続した値が格納されますが、任意の値を指定してデータを追加することもできます。
現在 4 つのデータを追加した状態で、次にデータを追加する時に連番型が設定された id カラムにデフォルトの値を格納するようにすると 5 が格納される状態です。
ここで id カラムにも値を指定してデータを追加してみます。
insert into myfriends values (7, 'Nishi', 'Fukuoka');
データを追加したあとにテーブルからデータを取得してみると指定した値がそのまま格納されています。このように連番型が設定されたカラムであっても値を指定してデータを追加することはできます。
ここでもう一度 id カラムにはデフォルト値が格納されるようにデータを追加したら id カラムには何の値が入るのか確認してみます。
insert into myfriends (name, address) values ('Hosono', 'Tokyo');
データを追加したあとテーブルからデータを取得してみると、 id カラムには元々次に入る予定だった 5 が格納されました。
では id カラムにはデフォルト値が格納されるようにあと 2 つデータを追加してみます。
insert into myfriends (name, address) values ('Baba', 'Nagoya'), ('Kamata', 'Akita');
id カラムには前回格納された 5 の値の次の値である 6 と 7 が格納されました。既に id カラムに 7 という値が格納されたデータを手動で追加済みでしたが、重複している値があるかどうか関係なく連続した値が格納されました。
このように連番型が設定されたカラムに値を指定してデータを追加することもできますが、そのデータは自動で格納される値には反映がされないので注意が必要です。
-- --
PosgtreSQL で利用できるデータ型の中で連番型の使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。