L'attribut AUTO_INCREMENT
peut être utilisé
pour générer un identifiant unique pour les nouvelles
lignes :
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;
Qui retourne :
+----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | lax | | 5 | whale | | 6 | ostrich | +----+---------+
Vous pouvez obtenir la valeur utilisée de la clef
AUTO_INCREMENT
avec la fonction SQL
LAST_INSERT_ID()
ou la fonction d'API
mysql_insert_id()
.
Note@ : Pour une insertion multi-lignes,
LAST_INSERT_ID()
/mysql_insert_id()
retourneront la clef AUTO_INCREMENT
de la
première ligne insérée. Cela
permet de reproduire les insertions multi-lignes sur d'autres
services.
Pour les tables MyISAM
et
BDB
vous pouvez spécifier
AUTO_INCREMENT
sur une colonne secondaire
d'une clef multi-colonnes. Dans ce cas, la valeur générée
pour la colonne auto-incrémentée est calculée de la fa¸on
suivante : MAX(auto_increment_column)+1) WHERE
prefix=given-prefix
. C'est utile lorsque vous voulez
placer des données dans des groupes ordonnés.
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;
Qui retourne :
+--------+----+---------+ | grp | id | name | +--------+----+---------+ | fish | 1 | lax | | mammal | 1 | dog | | mammal | 2 | cat | | mammal | 3 | whale | | bird | 1 | penguin | | bird | 2 | ostrich | +--------+----+---------+
Notez que dans ce cas, la valeur
d'AUTO_INCREMENT
sera réutilisée si vous
effacez la ligne avec la plus grande valeur
d'AUTO_INCREMENT
tous groupes confondus. Cela
n'arrive jamais avec les tables MyISAM
, dont
les valeurs AUTO_INCREMENT
ne sont jamais
réutilisées.
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.