English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Uso de secuencia MySQL

MySQL 序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现。

本章我们将介绍如何使用MySQL的序列。

使用 AUTO_INCREMENT

MySQL 中最简单使用序列的方法就是使用 MySQL AUTO_INCREMENT 来定义序列。

在线示例

以下示例中创建了数据表 insect, insect 表中 id 无需指定值可实现自动增长。

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 filas afectadas (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 filas afectadas (0.02 sec)
Registros: 3  Duplicados: 0    Advertencias: 0
mysql> SELECT * FROM insect ORDER BY id;
+----+-------------+------------+------------+
| id | name | date | origin |
+----+-------------+------------+------------+
|  1 | mosca de la fruta | 2001-09-10 | cocina |
|  2 | cucaracha de muchos pies | 2001-09-10 | driveway |
|  3 | grillo | 2001-09-10 | front yard |
+----+-------------+------------+------------+
3 rows en set (0.00 sec)

Obtener el valor de AUTO_INCREMENT

En el cliente de MySQL puedes usar La función LAST_INSERT_ID() en SQL se utiliza para obtener el valor de la columna autoincremental insertada por última vez.

También se proporcionan funciones correspondientes en los scripts PHP o PERL para obtener el valor de la columna autoincremental insertada por última vez.

Ejemplo de PERL

Usar el atributo mysql_insertid para obtener el valor de AUTO_INCREMENT. Ejemplo a continuación:

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

Ejemplo de PHP

PHP utiliza la función mysql_insert_id () para obtener el valor de la columna AUTO_INCREMENT en la sentencia de inserción ejecutada.

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

Reiniciar secuencia

Si elimina múltiples registros de la tabla de datos y desea reordenar la columna AUTO_INCREMENT restante, puede hacerlo eliminando la columna autoincremental y luego volviendo a agregarla. Cuidado al realizar esta operación, ya que si se eliminan registros mientras se agregan nuevos, podría ocurrir un desorden en los datos. La operación se muestra a continuación:

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

Configurar el valor de inicio de la secuencia

El valor de inicio de la secuencia generalmente es1, pero si necesitas especificar un valor de inicio100, que podemos lograrlo con la siguiente sentencia:

mysql> CREATE TABLE insect
    -> (
    -> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    -> PRIMARY KEY (id),
    -> name VARCHAR(30) NOT NULL, 
    -> date DATE NOT NULL,
    -> origin VARCHAR(30) NOT NULL
)engine=innodb auto_increment=100 charset=utf8;

O también puedes lograrlo después de que la tabla se haya creado con la siguiente sentencia:

mysql> ALTER TABLE t AUTO_INCREMENT = 100;