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.
