Utilisation des séquences MySQL

Une séquence est un ensemble d'entiers 1, 2, 3, ... qui sont générés dans l'ordre sur une demande spécifique. Les séquences sont fréquemment utilisées dans les bases de données, car de nombreuses applications exigent que chaque ligne d'une table contienne une valeur unique et les séquences permettent de les générer facilement.

Ce chapitre décrit comment utiliser des séquences dans MySQL.

Utilisation de la colonne AUTO_INCREMENT

Le moyen le plus simple dans MySQL d'utiliser les séquences est de définir une colonne comme AUTO_INCREMENT et laissez le reste à MySQL pour prendre soin.

Exemple

Essayez l'exemple suivant. Cela créera une table et après cela, il insérera quelques lignes dans cette table où il n'est pas nécessaire de donner un ID d'enregistrement car il est automatiquement incrémenté par MySQL.

mysql> CREATE TABLE insect
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, # type of insect
   -> date DATE NOT NULL, # date collected
   -> origin VARCHAR(30) NOT NULL # where collected
);
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO insect (id,name,date,origin) VALUES
   -> (NULL,'housefly','2001-09-10','kitchen'),
   -> (NULL,'millipede','2001-09-10','driveway'),
   -> (NULL,'grasshopper','2001-09-10','front yard');
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> SELECT * FROM insect ORDER BY id;
+----+-------------+------------+------------+
| id |    name     |    date    |   origin   |
+----+-------------+------------+------------+
|  1 |  housefly   | 2001-09-10 |   kitchen  |
|  2 |  millipede  | 2001-09-10 |  driveway  |
|  3 | grasshopper | 2001-09-10 | front yard |
+----+-------------+------------+------------+
3 rows in set (0.00 sec)

Obtenir les valeurs AUTO_INCREMENT

le LAST_INSERT_ID( )est une fonction SQL, vous pouvez donc l'utiliser depuis n'importe quel client qui comprend comment émettre des instructions SQL. Sinon, les scripts PERL et PHP fournissent des fonctions exclusives pour récupérer la valeur auto incrémentée du dernier enregistrement.

Exemple PERL

Utilisez le mysql_insertid attribut pour obtenir le AUTO_INCREMENTvaleur générée par une requête. Cet attribut est accessible via un descripteur de base de données ou un descripteur d'instruction, selon la façon dont vous émettez la requête.

L'exemple suivant le référence via le handle de base de données.

$dbh->do ("INSERT INTO insect (name,date,origin)
VALUES('moth','2001-09-14','windowsill')");
my $seq = $dbh->{mysql_insertid};

Exemple PHP

Après avoir émis une requête qui génère une valeur AUTO_INCREMENT, récupérez la valeur en appelant le mysql_insert_id( ) commander.

mysql_query ("INSERT INTO insect (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id);
$seq = mysql_insert_id ($conn_id);

Renuméroter une séquence existante

Il peut y avoir un cas où vous avez supprimé de nombreux enregistrements d'une table et que vous souhaitez réorganiser tous les enregistrements. Cela peut être fait en utilisant une astuce simple, mais vous devez être très prudent de le faire si votre table a des jointures avec l'autre table.

Si vous déterminez que le reséquencement d'une colonne AUTO_INCREMENT est inévitable, la manière de le faire est de supprimer la colonne de la table, puis de l'ajouter à nouveau.

L'exemple suivant montre comment renuméroter le id values dans le tableau en utilisant cette technique.

mysql> ALTER TABLE insect DROP id;
mysql> ALTER TABLE insect
   -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
   -> ADD PRIMARY KEY (id);

Démarrage d'une séquence à une valeur particulière

Par défaut, MySQL commencera la séquence à partir de 1, mais vous pouvez également spécifier tout autre nombre au moment de la création de la table.

Le programme suivant est un exemple qui montre comment MySQL démarrera la séquence à partir de 100.

mysql> CREATE TABLE insect
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, # type of insect
   -> date DATE NOT NULL, # date collected
   -> origin VARCHAR(30) NOT NULL # where collected
);

Vous pouvez également créer la table, puis définir la valeur de séquence initiale avec le ALTER TABLE commander.

mysql> ALTER TABLE t AUTO_INCREMENT = 100;