どうも、nippaです。
PostgreSQLを使うに辺り、必要な知識を勉強しています。
勉強したことを少しづつまとめていきたいと思います。
環境
PostgreSQL10.12
インクリメントについて
データベースを使っていると自動的に、数字をインクリメント(1ずつ増やしていきた)したいことがあります。
トランザクションをナンバリングしたりとか、データに順序をつける場合に使われます。
それをデータベースで自動で行ってくれるのは便利なところです。
テーブルの作成
PostgreSQLではインクリメントで、SERIAL
型を使います。
ちなみに、MySQLではAUTO_INCREMENT
の属性を付与します。
SERIAL
の中身は4bytesのintegerなので、1から最大2147483647になります。
それでも足りないようであれば、BIGSERIAL
型が用意されています。
こちらは、8bytesのintegerなので、1から最大9223372036854775807までになります。
詳細はPostgreSQLの公式ドキュメントを見てください。
テーブルの作成SQLは以下のようになります。
CREATE TABLE test ( number SERIAL NOT NULL, value INTEGER, PRIMARY KEY (number) );
作成したテーブルの確認をします。
\d test /* 出力結果 */ Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+-------------------------------------- number | integer | | not null | nextval('test_number_seq'::regclass) value | integer | | | Indexes: "test_pkey" PRIMARY KEY, btree (number)
動作の確認
テーブルにデータを入れて、number
が自動でインクリメントされるかを確認します。
以下のSQLコマンドを実行します。
INSERT INTO test ( value ) VALUES (10), (20);
テーブルに格納したデータの確認を以下のSQLコマンドで行います。
SELECT * FROM test; number | value --------+------- 1 | 10 2 | 20
正しく、データが格納されているかを確認してください。
ちなみに、今回の場合、valueはNULLを許容しているので、
INSERT INTO test ( value ) VALUES (NULL);
NULLを格納してもnumberはインクリメントされます。
SELECT * FROM test; number | value --------+------- 1 | 10 2 | 20 3 |
感想
トランザクションを取ったりする場合には便利ですので、テーブル設計の際に考えても良いです。
ではでは、また次回。