MySQLi - Utilisation de séquences

Une séquence est un ensemble d'entiers 1, 2, 3, ... qui sont générés dans l'ordre à la demande. 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 les séquences dans MySQLi.

Utilisation de la colonne AUTO_INCREMENT

La manière la plus simple dans MySQLi d'utiliser les séquences est de définir une colonne comme AUTO_INCREMENT et de laisser le reste à MySQLi se charger.

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 MySQLi.

mysql>CREATE TABLE tutorials_auto(
   id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(30) NOT NULL,PRIMARY KEY(id));
Query OK, 0 rows affected (0.28 sec)

mysql>INSERT INTO tutorials_auto(id,name) VALUES(NULL,'sai'),(NULL,'ram');
Query OK, 2 rows affected (0.12 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM insect ORDER BY id;
+----+------+
| id | name |
+----+------+
|  1 | sai  |
|  2 | ram  |
+----+------+
2 rows in set (0.05 sec)

Obtenir les valeurs AUTO_INCREMENT

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 l'attribut mysql_insertid pour obtenir la valeur AUTO_INCREMENT 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 tutorials_auto (name,date,origin)
VALUES('moth','2001-09-14','windowsill')");
my $seq = $dbh->{mysqli_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 mysql_insert_id () -

mysql_query ("INSERT INTO tutorials_auto (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id);
$seq = mysqli_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 remettre en séquence tous les enregistrements. Cela peut être fait en utilisant une astuce simple, mais vous devez faire très attention à le faire si votre table a des jointures avec une autre table.

Si vous déterminez que la remise en séquence d'une colonne AUTO_INCREMENT est inévitable, la façon de le faire est de supprimer la colonne de la table, puis de l'ajouter à nouveau. L'exemple suivant montre comment renuméroter les valeurs d'id dans la table d'insectes à l'aide de cette technique -

mysql> ALTER TABLE tutorials_auto DROP id;
mysql> ALTER TABLE tutorials_auto
   -> 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, MySQLi 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. Voici l'exemple où MySQLi commencera la séquence à partir de 100.

mysql> CREATE TABLE tutorials_auto
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, 
   -> );

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

mysql> ALTER TABLE tutorials_auto AUTO_INCREMENT = 100;