El atributo AUTO_INCREMENT puede utilizarse
        para generar un identificador único para cada nueva fila:
      
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;
Lo cual devuelve:
+----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | lax | | 5 | whale | | 6 | ostrich | +----+---------+
        Para obtener el valor AUTO_INCREMENT más
        recientemente generado se puede utilizar la funcion SQL
        LAST_INSERT_ID() o la función del API de C
        mysql_insert_id(). Estas funciones son
        específicas de cada conexión, de modo que su valor de retorno
        no es afectado por las inserciones realizadas a través de otras
        conexiones.
      
        Nota: Para una inserción de múltiples filas,
        LAST_INSERT_ID()/mysql_insert_id()
        retornan el valor AUTO_INCREMENT de la
        primera de las filas
        insertadas. Esto permite que las inserciones de múltiples filas
        sean reproducidas correctamente en otros servidores en una
        configuración de replicación.
      
        Para tablas MyISAM y BDB
        se puede especificar AUTO_INCREMENT sobre una
        columna secundaria en un índice de múltiples columnas. En este
        caso, el valor generado para la columna
        AUTO_INCREMENT es calculado como
        MAX(auto_increment_column)+1 WHERE
        prefix=given-prefix. Esto es útil cuando se desea
        colocar datos en grupos ordenados.
      
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;
Lo cual devuelve:
+--------+----+---------+ | grp | id | name | +--------+----+---------+ | fish | 1 | lax | | mammal | 1 | dog | | mammal | 2 | cat | | mammal | 3 | whale | | bird | 1 | penguin | | bird | 2 | ostrich | +--------+----+---------+
        Nótese que en este caso (cuando la columna
        AUTO_INCREMENT es parte de un índice de
        múltiples columnas), los valores
        AUTO_INCREMENT son reutilizados si se elimina
        la fila con el valor AUTO_INCREMENT más alto
        en cualquier grupo. Esto ocurre incluso para tablas
        MyISAM, en las que los valores
        AUTO_INCREMENT normalmente no son
        reutilizados
      
        Si la columna AUTO_INCREMENT es parte de
        varios índices, MySQL generará valores secuenciales empleando
        el índice que comienza con la columna
        AUTO_INCREMENT, si hay uno. Por ejemplo, si
        la tabla animals contiene los índices
        PRIMARY KEY (grp, id) e INDEX
        (id), MySQL ignoraría el índice PRIMARY
        KEY al generar valores secuenciales. Como resultado,
        la tabla contendría una secuencia simple, sin considerar el
        valor grp.
      
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

