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
            

