SQL AUTO INCREMENTフィールド


Auto-increment は、新しいレコードがテーブルに挿入されるときに一意の番号を生成します。


AUTO INCREMENT フィールド

通常、新しいレコードを挿入するたびに主キーフィールドの値を自動的に作成したいと考えます。

テーブルに auto-increment フィールドを作成できます。


MySQL での構文

次の SQL 文は、"Persons" テーブルの "ID" 列を auto-increment 主キーフィールドとして定義します。

CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
)

MySQL は AUTO_INCREMENT キーワードを使用して auto-increment タスクを実行します。

デフォルトでは、AUTO_INCREMENT の開始値は 1 で、新しいレコードごとに 1 ずつ増加します。

AUTO_INCREMENT シーケンスを他の値から開始するには、次の SQL 構文を使用します。

ALTER TABLE Persons AUTO_INCREMENT=100

"Persons" テーブルに新しいレコードを挿入する際、"ID" 列に値を指定する必要はありません(一意の値が自動的に追加されます)。

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')

上記の SQL 文は、"Persons" テーブルに新しいレコードを挿入します。"ID" 列には一意の値が割り当てられます。"FirstName" 列は "Lars" に設定され、"LastName" 列は "Monsen" に設定されます。


SQL Server での構文

次の SQL 文は、"Persons" テーブルの "ID" 列を auto-increment 主キーフィールドとして定義します。

CREATE TABLE Persons
(
ID int IDENTITY(1,1) PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

MS SQL Server は IDENTITY キーワードを使用して auto-increment タスクを実行します。

上記の例では、IDENTITY の開始値は 1 で、新しいレコードごとに 1 ずつ増加します。

ヒント:"ID" 列を 10 から始めて 5 ずつ増加させるには、identity を IDENTITY(10,5) に変更してください。

"Persons" テーブルに新しいレコードを挿入する際、"ID" 列に値を指定する必要はありません(一意の値が自動的に追加されます)。

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')

上記の SQL 文は、"Persons" テーブルに新しいレコードを挿入します。"ID" 列には一意の値が割り当てられます。"FirstName" 列は "Lars" に設定され、"LastName" 列は "Monsen" に設定されます。


Access での構文

次の SQL 文は、"Persons" テーブルの "ID" 列を auto-increment 主キーフィールドとして定義します。

CREATE TABLE Persons
(
ID Integer PRIMARY KEY AUTOINCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

MS Access は AUTOINCREMENT キーワードを使用して auto-increment タスクを実行します。

デフォルトでは、AUTOINCREMENT の開始値は 1 で、新しいレコードごとに 1 ずつ増加します。

ヒント:"ID" 列を 10 から始めて 5 ずつ増加させるには、autoincrement を AUTOINCREMENT(10,5) に変更してください。

"Persons" テーブルに新しいレコードを挿入する際、"ID" 列に値を指定する必要はありません(一意の値が自動的に追加されます)。

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')

上記の SQL 文は、"Persons" テーブルに新しいレコードを挿入します。"ID" 列には一意の値が割り当てられます。"FirstName" 列は "Lars" に設定され、"LastName" 列は "Monsen" に設定されます。


Oracle での構文

Oracle では、コードは少し複雑です。

sequence オブジェクト(数値シーケンスを生成するオブジェクト)を使用して auto-increment フィールドを作成する必要があります。

次の CREATE SEQUENCE 構文を使用してください。

CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10

上記のコードは、seq_person という名前の sequence オブジェクトを作成します。これは 1 から始まり 1 ずつ増加します。このオブジェクトはパフォーマンスを向上させるために 10 個の値をキャッシュします。cache オプションは、アクセス速度を向上させるためにいくつのシーケンス値を保存するかを指定します。

"Persons" テーブルに新しいレコードを挿入するには、nextval 関数(seq_person シーケンスから次の値を取得する関数)を使用する必要があります。

INSERT INTO Persons (ID,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')

上記の SQL 文は、"Persons" テーブルに新しいレコードを挿入します。"ID" 列には seq_person シーケンスからの次の番号が割り当てられます。"FirstName" 列は "Lars" に設定され、"LastName" 列は "Monsen" に設定されます。


その他の拡張