SQL AUTO INCREMENT フィールド
オートインクリメント(Auto-increment)フィールドは、新しいレコードがテーブルに挿入されるたびに、一意の数値を自動的に生成する数値カラムです。
通常、新しいレコードが挿入されるたびに一意の数値を自動的に割り当てたい PRIMARY KEY(プライマリーキー)フィールドに対して、このオートインクリメントを設定します。
1. MySQL の構文
MySQL では、オートインクリメント機能を実現するために AUTO_INCREMENT キーワードを使用します。
以下の SQL は、「Persons」テーブルの作成時に「Personid」カラムをオートインクリメントのプライマリーキーとして定義する例です。
CREATE TABLE Persons (
Personid int AUTO_INCREMENT PRIMARY KEY, -- 自動連番される主キー
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);AUTO_INCREMENT のデフォルトの開始値は 1 で、新しいレコードごとに 1 ずつ増加します。
開始値を別の数値に変更したい場合は、以下の SQL ステートメントを使用します。
ALTER TABLE Persons AUTO_INCREMENT = 100;「Persons」テーブルに新しいレコードを挿入する際、「Personid」カラムの値を指定する必要はありません(一意の値が自動的に追加されます)。
INSERT INTO Persons (FirstName, LastName)
VALUES ('Lars', 'Monsen');上記の SQL は「Persons」テーブルに新しいレコードを挿入し、「Personid」カラムには自動的に次の新しい一意な数値が割り当てられます。
2. SQL Server の構文
SQL Server では、オートインクリメント機能を実現するために IDENTITY キーワードを使用します。
以下の SQL は、「Persons」テーブルの作成時に「Personid」カラムをオートインクリメントのプライマリーキーとして定義する例です。
CREATE TABLE Persons (
Personid int IDENTITY(1,1) PRIMARY KEY, -- (開始値, 増分値) を指定
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);上記の例では、IDENTITY の開始値は 1 で、新しいレコードごとに 1 ずつ増加します。
Tips: 「Personid」カラムを 10 から開始し、5 ずつ増加させたい場合は、IDENTITY(10,5) と記述します。
レコード挿入時の挙動は MySQL と同様で、「Personid」を指定せずに挿入可能です。
INSERT INTO Persons (FirstName, LastName)
VALUES ('Lars', 'Monsen');3. MS Access の構文
MS Access では、オートインクリメント機能に AUTOINCREMENT キーワードを使用します。
以下の SQL ステートメントは、「Persons」テーブルの作成時に「Personid」カラムをオートインクリメントのプライマリーキーとして定義します。
CREATE TABLE Persons (
Personid AUTOINCREMENT PRIMARY KEY, -- 自動連番の設定
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);AUTOINCREMENT のデフォルトの開始値は 1 で、新しいレコードごとに 1 ずつ増加します。
Tips: 開始値を 10、増分を 5 に設定したい場合は、AUTOINCREMENT(10,5) と記述します。
挿入時の動作は他のデータベースと同様です。
INSERT INTO Persons (FirstName, LastName)
VALUES ('Lars', 'Monsen');4. Oracle の構文
Oracle では、SEQUENCE(シーケンス)オブジェクトを使用してオートインクリメントフィールドを作成する必要があります(このオブジェクトが数値のシーケンスを生成します)。
以下は CREATE SEQUENCE の構文です。
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10;上記のコードは、1 から始まり 1 ずつ増加する seq_person という名前の SEQUENCE オブジェクトを作成します。また、パフォーマンス向上のために最大 10 個の値をキャッシュします。CACHE オプションは、高速アクセスのためにメモリ上に保持するシーケンス値の数を指定するものです。
「Persons」テーブルに新しいレコードを挿入する際は、nextval 関数(seq_person シーケンスから次の値を取得する関数)を使用する必要があります。
INSERT INTO Persons (Personid, FirstName, LastName)
VALUES (seq_person.nextval, 'Lars', 'Monsen'); -- 次のシーケンス値を明示的に取得して挿入上記の SQL は「Persons」テーブルに新しいレコードを挿入し、「Personid」カラムには seq_person シーケンスから割り当てられた次の一意な数値が格納されます。