O atributo AUTO_INCREMENT
pode ser usado para
gerar uma identificação única para um novo registro:
CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ); INSERT INTO animals (name) VALUES ("dog"),("cat"),("penguin"), ("lax"),("whale"),("ostrich"); SELECT * FROM animals;
Que retorna:
+----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | lax | | 5 | whale | | 6 | ostrich | +----+---------+
Você pode recuperar o valor AUTO_INCREMENT
mais recente com a função SQL
LAST_INSERT_ID()
ou a função da API C
mysql_insert_id()
. Nota: para uma inserção
de várias linhas
LAST_INSERT_ID()
/mysql_insert_id()
retornará atualmente a AUTO_INCREMENT
chave
da primeira linha inserida.
Isto permite que inserções multi-linhas sejam reproduzidas
corretamente em outros servidores em uma configração de
replicação.
Para tabelas MyISAM
e BDB
você pode especificar AUTO_INCREMENT
em uma
coluna secundária em um índice multi-coluna. Neste caso, o
valor gerado para a coluna AUTO_INCREMENT
é
calculado como MAX(auto_increment_column)+1) WHERE
prefix=given-prefix
. Isto é útil quando você quer
colocar dados em grupos ordenados.
CREATE TABLE animals ( grp ENUM('fish','mammal','bird') NOT NULL, id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (grp,id) ); INSERT INTO animals (grp,name) VALUES("mammal","dog"),("mammal","cat"), ("bird","penguin"),("fish","lax"),("mammal","whale"), ("bird","ostrich"); SELECT * FROM animals ORDER BY grp,id;
Que retorna:
+--------+----+---------+ | grp | id | name | +--------+----+---------+ | fish | 1 | lax | | mammal | 1 | dog | | mammal | 2 | cat | | mammal | 3 | whale | | bird | 1 | penguin | | bird | 2 | ostrich | +--------+----+---------+
Note que neste caso (quando o valor
AUTO_INCREMENT
é parte de um índice
multi-coluna), o valor de AUTO_INCREMENT
será reutilizado se você deletar a linha com o maior valor
AUTO_INCREMENT
em qualquer grupo. Isto
caontece mesmo para tabelas MyISAM
, para as
quais os valores AUTO_INCREMENT
normalmente
não são reusados.)
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.