MySQLi - Usando Sequências
Uma sequência é um conjunto de inteiros 1, 2, 3, ... que são gerados em ordem sob demanda. As sequências são frequentemente usadas em 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 MySQLi.
Usando coluna AUTO_INCREMENT
A maneira mais simples no MySQLi de usar Sequences é definir uma coluna como AUTO_INCREMENT e deixar o restante das coisas para o MySQLi cuidar.
Exemplo
Experimente o seguinte exemplo. Isso criará a tabela e, depois disso, inserirá algumas linhas nesta tabela onde não é necessário fornecer o ID do registro porque é incrementado automaticamente pelo MySQLi.
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)
Obtenha os valores AUTO_INCREMENT
LAST_INSERT_ID () é uma função SQL, então você pode usá-la de 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.
Exemplo PERL
Use o atributo mysql_insertid para obter o valor AUTO_INCREMENT 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 tutorials_auto (name,date,origin)
VALUES('moth','2001-09-14','windowsill')");
my $seq = $dbh->{mysqli_insertid};
Exemplo de PHP
Depois de emitir uma consulta que gere um valor AUTO_INCREMENT, recupere o valor chamando 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);
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 fazê-lo se sua mesa estiver tendo associações com outra mesa.
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 os valores de id na tabela de insetos usando 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);
Iniciando uma sequência em um valor particular
Por padrão, o MySQLi iniciará a sequência de 1, mas você também pode especificar qualquer outro número no momento da criação da tabela. A seguir está o exemplo em que o MySQLi iniciará a sequência de 100.
mysql> CREATE TABLE tutorials_auto
-> (
-> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
-> PRIMARY KEY (id),
-> name VARCHAR(30) NOT NULL,
-> );
Como alternativa, você pode criar a tabela e definir o valor da sequência inicial com ALTER TABLE.
mysql> ALTER TABLE tutorials_auto AUTO_INCREMENT = 100;