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 テーブルと BDB
        テーブルでは、複合インデックスの2つめのカラムに
        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)
             );
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
        が再使用されることはない)。
      
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

