ホームページ >データベース >mysql チュートリアル >PostgreSQL で AUTO_INCREMENT が機能しないのはなぜですか? ID の自動インクリメントを実現するにはどうすればよいですか?

PostgreSQL で AUTO_INCREMENT が機能しないのはなぜですか? ID の自動インクリメントを実現するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-22 11:37:10424ブラウズ

Why Doesn't AUTO_INCREMENT Work in PostgreSQL, and How Can I Achieve Auto-Incrementing IDs?

PostgreSQL の AUTO_INCREMENT のトラブルシューティング

PostgreSQL は、MySQL などの他のデータベース システムで使用される AUTO_INCREMENT キーワードをサポートしません。 これを使用しようとすると、構文エラーが発生します。 このガイドでは、PostgreSQL で主キーの自動インクリメントを実現する方法について説明します。

PostgreSQL 10 以降: IDENTITY 列の使用

PostgreSQL 10 以降のバージョンで推奨されるアプローチは、IDENTITY 列を利用することです。 SERIAL 列とは異なり、IDENTITY 列では GENERATED BY DEFAULT および GENERATED ALWAYS オプションを使用することでより柔軟な機能が提供されます。

IDENTITY 列を含むテーブルの作成

<code class="language-sql">CREATE TABLE staff (
  staff_id int GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  staff    text NOT NULL
);</code>

既存のテーブルへの IDENTITY 列の追加

<code class="language-sql">ALTER TABLE staff ADD COLUMN staff_id int GENERATED ALWAYS AS IDENTITY;</code>

PostgreSQL 9.6 以前: SERIAL の使用

古い PostgreSQL バージョン (9.6 以下) の場合、SERIAL 擬似型は同様の自動インクリメント機能を提供します。

<code class="language-sql">CREATE TABLE staff (
  staff_id serial PRIMARY KEY,
  staff    text NOT NULL
);</code>

SERIAL は、関連付けられたシーケンスを自動的に作成および管理し、staff_id 列の一意の増加値を確保します。

挿入された値の制御

挿入された値をきめ細かく制御するには、システムのデフォルト値やユーザー指定の値をオーバーライドする場合でも、OVERRIDING {SYSTEM|USER} VALUE ステートメントで INSERT を使用します。 これにより、単純な自動インクリメントを超えた高度な制御が可能になります。

以上がPostgreSQL で AUTO_INCREMENT が機能しないのはなぜですか? ID の自動インクリメントを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。