11.Champ auto-incrémenté
11.1.Introduction
Dans le chapitre présentant les jointures entre tables
[où?]
nous avons constaté que bien souvent il est intéressant de représenter un enregistrement par un identifiant numérique unique.
Pour affecter un tel identifiant à chaque nouvel élément inséré dans une table donnée, nous pourrions envisager d'exécuter une première requête afin de récupérer la plus grande valeur de "id" déjà utilisée, l'incrémenter de un et utiliser cette nouvelle valeur dans une requête INSERT INTO.
En fait, cette façon de faire est tout à fait inenvisageable:
|
Pour éviter cela, il est possible de demander à la base d'incrémenter un compteur interne associé à la base et nous retourner la dernière valeur trouvée. Ce compteur peut prendre le nom de champ auto-incrémenté, séquence, etc. Dans, ce cas, le serveur fait "patienter" le programme 2 (on dit qu'il pose un verrour) tant qu'il traite la demande du programme 1. De ce fait, il est impossible que 2 programmes ne se retrouvent avec la même valeur d'identifiant.
Si, au moment de la création de la base, nous indiquons qu'un champ doit être auto incrémenté alors à chaque nouvelle insertion ce champ prendra automatiquement la valeur suivante de la séquence (à partir du moment où la valeur de ce champ n'est pas précisée lors de l'insertion). Malheureusement la syntaxe dépend fortement du type de serveur de base de données.
11.2.avec MySQL
Avec MySQL, un champ auto-incrémenté se déclare avec le mot clé AUTO_INCREMENT placé après un type entier (typiquement INTEGER ou BIGINT selon le nombre d'enregistrement attendu). Il ne peut y avoir qu'un seul champ auto-incrémenté par table et ce champ est obligatoirement une clé par conséquent le mot clé AUTO_INCREMENT est systématiquement associé à PRIMARY KEY. De plus un tel champ est nécessairement non NULL et positif ce qui donne au final
CREATE TABLE matable (id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, ...autres champs...) |
L'insertion de données se fait alors comme suit:
INSERT INTO (categorie) VALUES ('nouvellecategorie') |
Le champ id n'étant pas précisé, il prend la valeur par défaut, à savoir: la valeur suivante du compteur.
11.3.avec PostgreSQL
Tout cela doit être défini au moment de la création de la table, par une requête du type:
CREATE TABLE matable (id serial, ...autres champs...) |
L'insertion de données se fait alors comme suit:
INSERT INTO (categorie) VALUES ('nouvellecategorie') |
Le champ id n'étant pas précisé, il prend la valeur par défaut, à savoir: la valeur suivante du compteur.
Version imprimable

