PostgreSQL - AUTO INCREMENT
こんにちは、データベース愛好家の皆さん!今日は、PostgreSQLの非常に便利な機能の一つであるAUTO INCREMENT機能について深く掘り下げます。あなたの近所の親切なコンピュータ教師として、私はこのトピックをガイドするのが楽しみです。プログラミングに完全に初心者であっても大丈夫です。コーヒーを一杯取り、この学習冒険に一緒に参加しましょう!
AUTO INCREMENTとは?
本題に入る前に、まずAUTO INCREMENTが実際に何を意味するのか理解しましょう。大きなパーティを組織して、それぞれのゲストにユニークな番号を割り当てる imagine します。手動で番号を割り当てる代わりに、新しいゲストごとに自動的に増加する魔法のカウンタがあれば素晴らしいでしょう。これがデータベース内でAUTO INCREMENTが行うことです!
PostgreSQLでは、AUTO INCREMENTはテーブルの各新しい行に対して自動的にユニークな番号を生成する機能です。顧客IDや注文番号などの各レコードに対してユニークな識別子が必要な場合に特に便利です。
文法
それでは、PostgreSQLでAUTO INCREMENTを使用する方法を見てみましょう。文法は非常にシンプルですが、最初は少し威圧的に見えるかもしれません。ステップバイステップに分解していきます。
CREATE TABLE table_name (
column_name SERIAL PRIMARY KEY,
other_column1 data_type,
other_column2 data_type,
...
);
この文法を分解してみましょう:
-
CREATE TABLE table_name
: この部分は、指定した名前の新しいテーブルを作成します。 -
column_name SERIAL PRIMARY KEY
: ここが魔法の部分です!
-
column_name
は、自動インクリメントカラムに割り当てる名前です。 -
SERIAL
は、自動インクリメントする整数カラムを作成するPostgreSQL独自のデータタイプです。 -
PRIMARY KEY
は、このカラムがユニークな値を含むことを確保し、各行を識別するために使用できることを意味します。
- その他の行は、テーブル内の他のカラムを定義します。
例
実際の例で実践してみましょう。小さな図書館のデータベースを作成する imagine します。本を追跡したい場合、各本にはユニークなIDが必要です。
CREATE TABLE books (
book_id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
author VARCHAR(100) NOT NULL,
publication_year INTEGER
);
この例では:
-
book_id
は私たちの自動インクリメントカラムです。新しい本ごとにユニークな番号を自動的に割り当てます。 -
title
とauthor
は VARCHAR カラムで、本のタイトルと著者名を保存します。 -
publication_year
は INTEGER カラムで、本が出版された年を保存します。
次に、テーブルにいくつかの本を追加します:
INSERT INTO books (title, author, publication_year)
VALUES ('To Kill a Mockingbird', 'Harper Lee', 1960);
INSERT INTO books (title, author, publication_year)
VALUES ('1984', 'George Orwell', 1949);
INSERT INTO books (title, author, publication_year)
VALUES ('The Great Gatsby', 'F. Scott Fitzgerald', 1925);
book_id
の値を指定していません。PostgreSQLは自動的にこれらの値を生成します。テーブルをクエリすると:
SELECT * FROM books;
以下のような結果が表示されるかもしれません:
book_id | title | author | publication_year |
---|---|---|---|
1 | To Kill a Mockingbird | Harper Lee | 1960 |
2 | 1984 | George Orwell | 1949 |
3 | The Great Gatsby | F. Scott Fitzgerald | 1925 |
PostgreSQLは各行にユニークな book_id
値を自動的に割り当て、1から始めて新しいエントリごとに1ずつ増加します。
背後の仕組み
PostgreSQLが次の番号を使うことを知るのはどのようにしているのでしょうか?素晴らしい質問です!背後では、PostgreSQLはシーケンスを使用して次利用可能な番号を追跡しています。
SERIAL
データタイプを使用すると、PostgreSQLはそのカラムに対して自動的にシーケンスを作成します。シーケンスは、最後に割り当てた番号を覚え、次に要求されたときに次の番号を割り当てるカウンターのようです。
シーケンスを実際に確認することもできます:
\d books
このコマンドは以下のような結果を表示します:
Table "public.books"
Column | Type | Collation | Nullable | Default
-----------------+------------------------+-----------+----------+------------------------------
book_id | integer | | not null | nextval('books_book_id_seq'::regclass)
title | character varying(100) | | not null |
author | character varying(100) | | not null |
publication_year| integer | | |
Indexes:
"books_pkey" PRIMARY KEY, btree (book_id)
nextval('books_book_id_seq'::regclass)
の部分を見ると、PostgreSQLがシーケンスを使用して book_id
の次の値を取得していることがわかります。
注意点
AUTO INCREMENTは非常に便利ですが、連続した番号而无しのギャップを保証しないことを覚えておくことが重要です。行を插入してから削除すると、その番号は再利用されません。これはデータの整合性にとって実際には良いことですが、念頭に置いておく必要があります。
例えば、2番目の本を削除します:
DELETE FROM books WHERE book_id = 2;
そして新しい本を插入します:
INSERT INTO books (title, author, publication_year)
VALUES ('Pride and Prejudice', 'Jane Austen', 1813);
テーブルは以下のようになります:
book_id | title | author | publication_year |
---|---|---|---|
1 | To Kill a Mockingbird | Harper Lee | 1960 |
3 | The Great Gatsby | F. Scott Fitzgerald | 1925 |
4 | Pride and Prejudice | Jane Austen | 1813 |
book_id
2が欠けており、新しい本は book_id
4を取得しています。
結論
そして、ここまでがPostgreSQLのAUTO INCREMENTについての説明です。AUTO INCREMENTとは何か、どのように使用するか、そしてどのように動作するかをカバーしました。AUTO INCREMENTは、ユニークなIDを割り当てる際に非常に便利な機能で、あなたの人生をより簡単にします。
データベースの世界を続けて探求してください。AUTO INCREMENTは、ユニークな識別子を割り当てる際に信頼できる相棒となります。練習を続け、好奇心を持ち続けると、すぐにPostgreSQLの達人になるでしょう!
ハッピーコーディング、そしてあなたのクエリがいつも期待通りに結果を返すことを祈っています!
Credits: Image by storyset