SAP HANA - Sequências SQL
Uma sequência é um conjunto de inteiros 1, 2, 3, que são gerados em ordem sob demanda. As sequências são freqüentemente 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.
Usando coluna AUTO_INCREMENT
A maneira mais simples no MySQL de usar sequências é definir uma coluna como AUTO_INCREMENT e deixar o restante das coisas para o MySQL cuidar.
Exemplo
Experimente o seguinte exemplo. Isso criará a tabela e depois disso irá inserir algumas linhas nesta tabela onde não é necessário fornecer o ID do registro porque é auto-incrementado 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
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 auto-incrementado 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 de 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 mysql_insert_id () -
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ê tenha excluído muitos registros de uma tabela e queira reordenar 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 junção 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 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ê também pode especificar qualquer outro número no momento da criação da tabela. A seguir está o exemplo em que 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 definir o valor da sequência inicial com ALTER TABLE.