SQL: uso de secuencias

Una secuencia es una colección de números enteros 1, 2, 3, … que se generan bajo demanda bajo demanda. Las secuencias se utilizan a menudo en 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 crearlas.

Este capítulo describe cómo usar secuencias en MySQL.

Usando una columna AUTO_INCREMENT

La forma más sencilla de usar secuencias en MySQL es definir una columna como AUTO_INCREMENT y MySQL se encargará del resto.

Ejemplo

Pruebe el siguiente ejemplo. Esto creará una tabla y luego insertará varias filas en esa tabla donde no se requiere el ID de registro porque MySQL lo incrementa automáticamente.

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)

Obtener valores AUTO_INCREMENT

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

Ejemplo de PERL

Usar mysql_insertid para obtener el valor AUTO_INCREMENT generado por la solicitud. Se accede a este atributo a través del identificador de la base de datos o del identificador de instrucciones, según cómo esté ejecutando la consulta. El siguiente ejemplo se refiere a él a través de un identificador de base de datos.

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

Ejemplo de PHP

Después de emitir una solicitud que genera un valor AUTO_INCREMENT, obtenga el valor llamando mysql_insert_id () función.

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

Renumerar una secuencia existente

Es posible que haya eliminado muchos registros de una tabla y desee cambiar la secuencia de todos los registros. Esto se puede hacer con un simple truco, pero debes tener mucho cuidado al hacerlo y verificar si tu mesa tiene una unión a otra mesa o no.

Si ha determinado que cambiar la secuencia de una columna AUTO_INCREMENT es inminente, 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 ID en la tabla de insectos utilizando este método.

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

Ejecutando una secuencia con un valor específico

De forma predeterminada, MySQL inicia la secuencia en 1, pero también puede especificar cualquier otro número durante la creación de la tabla.

Hay un ejemplo en el siguiente bloque de código donde MySQL iniciará la secuencia en 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
);

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

mysql> ALTER TABLE t AUTO_INCREMENT = 100;

🚫