Usando sequências MySQL
Uma sequência é um conjunto de inteiros 1, 2, 3, ... que são gerados em ordem em uma demanda específica. As sequências são freqüentemente usadas nos bancos de dados porque muitos aplicativos exigem que cada linha de uma tabela contenha um valor exclusivo e as sequências fornecem uma maneira fácil de gerá-los.
Este capítulo descreve como usar sequências no MySQL.
Usando a coluna AUTO_INCREMENT
A maneira mais simples no MySQL de usar Sequências é definir uma coluna como AUTO_INCREMENT e deixar o restante para o MySQL cuidar.
Exemplo
Experimente o seguinte exemplo. Isso criará a tabela e, em seguida, inserirá algumas linhas nesta tabela onde não é necessário fornecer o ID do registro porque é incrementado automaticamente pelo MySQL.
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)
Obtenha os valores AUTO_INCREMENT
o LAST_INSERT_ID( )é uma função SQL, portanto, você pode usá-la em qualquer cliente que saiba como emitir instruções SQL. Caso contrário, os scripts PERL e PHP fornecem funções exclusivas para recuperar o valor incrementado automaticamente do último registro.
PERL Exemplo
Use o mysql_insertid atributo para obter o AUTO_INCREMENTvalor gerado por uma consulta. Este atributo é acessado por meio de um identificador de banco de dados ou um identificador de instrução, dependendo de como você emite a consulta.
O exemplo a seguir faz referência a ele por meio do identificador do banco de dados.
$dbh->do ("INSERT INTO insect (name,date,origin)
VALUES('moth','2001-09-14','windowsill')");
my $seq = $dbh->{mysql_insertid};
Exemplo de PHP
Depois de emitir uma consulta que gere um valor AUTO_INCREMENT, recupere o valor chamando o mysql_insert_id( ) comando.
mysql_query ("INSERT INTO insect (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id);
$seq = mysql_insert_id ($conn_id);
Renumerando uma sequência existente
Pode haver um caso em que você excluiu muitos registros de uma tabela e deseja sequenciar novamente todos os registros. Isso pode ser feito usando um truque simples, mas você deve ter muito cuidado ao fazer isso se sua tabela estiver tendo associações com a outra.
Se você determinar que o novo sequenciamento de uma coluna AUTO_INCREMENT é inevitável, a maneira de fazer isso é remover a coluna da tabela e adicioná-la novamente.
O exemplo a seguir mostra como renumerar o id values na tabela usando esta técnica.
mysql> ALTER TABLE insect DROP id;
mysql> ALTER TABLE insect
-> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
-> ADD PRIMARY KEY (id);
Iniciando uma sequência em um valor particular
Por padrão, o MySQL iniciará a sequência de 1, mas você pode especificar qualquer outro número também no momento da criação da tabela.
O programa a seguir é um exemplo que mostra como o MySQL iniciará a sequência de 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
);
Como alternativa, você pode criar a tabela e, em seguida, definir o valor da sequência inicial com o ALTER TABLE comando.
mysql> ALTER TABLE t AUTO_INCREMENT = 100;