AUTO_INCREMENT
属性を使用すると、新しい行に一意の識別子を生成できます。
CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ); INSERT INTO animals (name) VALUES ('dog'),('cat'),('penguin'), ('lax'),('whale'),('ostrich'); SELECT * FROM animals;
次の結果が表示されます。
+----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | lax | | 5 | whale | | 6 | ostrich | +----+---------+
SQL 関数
LAST_INSERT_ID()
または C API 関数
mysql_insert_id()
を使用すると、最後に生成した
AUTO_INCREMENT
の値を取得できます。これらは接続に固有の関数なので、別の接続が同様に挿入を実行していても、戻り値は影響を受けません。
複数行を同時に挿入する場合、LAST_INSERT_ID()
と
mysql_insert_id()
は、実際には最初に挿入した行の
AUTO_INCREMENT
キーを返します。これにより、レプリケーションセットアップの場合に、ほかのサーバーでも正しく複数行の挿入を再現できます。
MyISAM
テーブルでは、複合インデックス内のセカンダリカラムに
AUTO_INCREMENT
を指定することができます。この場合、AUTO_INCREMENT
カラムに生成される値は、MAX(
として計算されます。これは、データを順序付きのグループに分割する場合に便利です。
auto_increment_column
)
+ 1 WHERE
prefix=given-prefix
CREATE TABLE animals ( grp ENUM('fish','mammal','bird') NOT NULL, id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (grp,id) ) ENGINE=MyISAM; INSERT INTO animals (grp,name) VALUES ('mammal','dog'),('mammal','cat'), ('bird','penguin'),('fish','lax'),('mammal','whale'), ('bird','ostrich'); SELECT * FROM animals ORDER BY grp,id;
次の結果が表示されます。
+--------+----+---------+ | grp | id | name | +--------+----+---------+ | fish | 1 | lax | | mammal | 1 | dog | | mammal | 2 | cat | | mammal | 3 | whale | | bird | 1 | penguin | | bird | 2 | ostrich | +--------+----+---------+
この場合 (AUTO_INCREMENT
カラムが複合インデックスの一部として使用されている場合)、グループ内で最大の
AUTO_INCREMENT
値を持つ行を削除すると、そのグループで同じ
AUTO_INCREMENT
値が再使用されることになります。これは
MyISAM
テーブルの場合にも発生します (通常は
AUTO_INCREMENT
値が再使用されることはない)。
AUTO_INCREMENT
カラムが複合インデックスの一部として使用されている場合、AUTO_INCREMENT
カラムで始まるインデックスが存在すれば、MySQL
はそれを使用してシーケンス値を生成します。たとえば、animals
テーブルにインデックス
PRIMARY KEY (grp, id)
と
INDEX (id)
が含まれている場合、MySQL
はシーケンス値の生成で
PRIMARY KEY
を無視します。その結果、テーブルには
grp
値ごとに 1
つのシーケンスではなく、単一のシーケンスが含まれることになります。
AUTO_INCREMENT
値を 1
以外の値で始めるには、CREATE
TABLE
または
ALTER TABLE
を使用して次のように値を設定します。
mysql> ALTER TABLE tbl AUTO_INCREMENT = 100;
AUTO_INCREMENT
に関する詳細の参照先を次に示します。
カラムに
AUTO_INCREMENT
属性を割り当てる方法:
項8.1.17. 「CREATE TABLE
構文」、および
項8.1.7. 「ALTER TABLE
構文」
SQL モードに応じた
AUTO_INCREMENT
の動作: Server SQL Modes
最後に生成された
AUTO_INCREMENT
値を含んでいる行を見つける方法:
項7.2.3. 「比較関数と演算子」
使用する
AUTO_INCREMENT
値の設定: Session System Variables
AUTO_INCREMENT
とレプリケーション:
Replication Features and Issues
レプリケーションに使用できる
AUTO_INCREMENT
関連のサーバーシステム変数
(auto_increment_increment
と
auto_increment_offset
):
Server System Variables