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

Uso de Sequências 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 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, 'joaninha', '}}2001-09-10','front yard');
Query OK, 3 linhas afetadas (0.02 sec)
Registros: 3  Duplicados: 0 Warnings: 0
mysql> SELECT * FROM insect ORDER BY id;
+----+-------------+------------+------------+
| id | name |
+----+-------------+------------+------------+
|  1 | mosca doméstica | 2001-09-10 | cozinha |
|  2 | besouro | 2001-09-10 | garagem |
|  3 | joaninha | 2001-09-10 | front yard |
+----+-------------+------------+------------+
3 linhas afetadas em conjunto (0.00 sec)

Obter valor AUTO_INCREMENT

No cliente MySQL, você pode usar A função LAST_INSERT_ID() no SQL é usada para obter o valor da coluna de auto-incremento da última tabela inserida.

Também são fornecidas funções correspondentes em scripts PHP ou PERL para obter o valor da coluna de auto-incremento da última tabela inserida.

Exemplo PERL

Usar o atributo mysql_insertid para obter o valor da coluna AUTO_INCREMENT. Exemplo a seguir:

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

Exemplo PHP

O PHP usa a função mysql_insert_id() para obter o valor da coluna AUTO_INCREMENT da cláusula INSERT executada.

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

Redefinir sequência

Se você deletar várias linhas da tabela de dados e quiser rearranjar a coluna AUTO_INCREMENT dos dados restantes, você pode fazer isso removendo a coluna de auto-incremento e adicionando-a novamente. Mas, a operação deve ser feita com muito cuidado, pois, se enquanto estiver deletando também estiver adicionando novos registros, pode ocorrer confusão nos dados. A operação é como mostrado a seguir:

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

Configuração do valor inicial da sequência

Geralmente, o valor inicial da sequência é1, mas se você precisar especificar um valor inicial100, então podemos implementar isso com a seguinte declaração:

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

Ou você também pode implementar isso após a criação da tabela com a seguinte declaração:

mysql> ALTER TABLE t AUTO_INCREMENT = 100;