MySQLi: uso de secuencias

Una secuencia es un conjunto de enteros 1, 2, 3, ... que se generan en orden bajo demanda. Las secuencias se utilizan con frecuencia en las bases de datos porque muchas aplicaciones requieren que cada fila de una tabla contenga un valor único y las secuencias proporcionan una manera fácil de generarlas. Este capítulo describe cómo usar secuencias en MySQLi.

Usando la columna AUTO_INCREMENT

La forma más sencilla en MySQLi de usar Sequences es definir una columna como AUTO_INCREMENT y dejar que MySQLi se encargue del resto de las cosas.

Ejemplo

Pruebe el siguiente ejemplo. Esto creará una tabla y luego insertará algunas filas en esta tabla donde no es necesario dar un ID de registro porque MySQLi lo incrementa automáticamente.

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)

Obtener valores AUTO_INCREMENT

LAST_INSERT_ID () es una función de SQL, por lo que puede usarla desde cualquier cliente que entienda cómo emitir sentencias de SQL. De lo contrario, los scripts PERL y PHP proporcionan funciones exclusivas para recuperar el valor incrementado automáticamente del último registro.

Ejemplo PERL

Utilice el atributo mysql_insertid para obtener el valor AUTO_INCREMENT generado por una consulta. Se accede a este atributo a través de un identificador de base de datos o un identificador de declaración, según cómo emita la consulta. El siguiente ejemplo lo hace referencia a través del identificador de la base de datos:

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

Ejemplo de PHP

Después de emitir una consulta que genera un valor AUTO_INCREMENT, recupere el valor llamando a 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);

Renumerar una secuencia existente

Puede haber un caso en el que haya eliminado muchos registros de una tabla y desee volver a secuenciar todos los registros. Esto se puede hacer usando un truco simple, pero debe tener mucho cuidado al hacerlo si su tabla se une con otra tabla.

Si determina que volver a secuenciar una columna AUTO_INCREMENT es inevitable, la forma de hacerlo es eliminar la columna de la tabla y luego agregarla nuevamente. El siguiente ejemplo muestra cómo volver a numerar los valores de identificación en la tabla de insectos utilizando esta técnica:

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);

Iniciar una secuencia con un valor particular

De forma predeterminada, MySQLi iniciará la secuencia desde 1, pero también puede especificar cualquier otro número en el momento de la creación de la tabla. A continuación se muestra el ejemplo en el que MySQLi iniciará la secuencia desde 100.

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

Alternativamente, puede crear la tabla y luego establecer el valor de secuencia inicial con ALTER TABLE.

mysql> ALTER TABLE tutorials_auto AUTO_INCREMENT = 100;