http://docs.oracle.com/cd/E17952_01/refman-5.5-en/example-auto-increment.html
3.6.9. Usando AUTO_INCREMENT
O atributo AUTO_INCREMENT pode ser usado para gerar uma identidade exclusiva para novas linhas:
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; Which returns: +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | lax | | 5 | whale | | 6 | ostrich | +----+---------+
Nenhum valor foi especificado para a coluna AUTO_INCREMENT, então o MySQL atribuiu números de sequência automaticamente. Você também pode atribuir explicitamente NULL ou 0 à coluna para gerar números de sequência.
Você pode recuperar o valor AUTO_INCREMENT mais recente com a função SQL LAST_INSERT_ID() ou a função C API mysql_insert_id(). Essas funções são específicas da conexão, portanto, seus valores de retorno não são afetados por outra conexão que também esteja executando inserções.
Use o menor tipo de dados inteiro para a coluna AUTO_INCREMENT que seja grande o suficiente para conter o valor de sequência máximo que você precisará. Quando a coluna atinge o limite superior do tipo de dados, a próxima tentativa de gerar um número de sequência falha. Use o atributo UNSIGNED se possível para permitir um intervalo maior. Por exemplo, se você usar TINYINT, o número de sequência máximo permitido é 127. Para TINYINT UNSIGNED, o máximo é 255. Consulte a Seção 11.2.1, “Tipos de inteiros (valor exato) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT ” para os intervalos de todos os tipos inteiros.
ObservaçãoPara uma inserção de várias linhas, LAST_INSERT_ID() e mysql_insert_id() na verdade retornam a chave AUTO_INCREMENT da primeira das linhas inseridas. Isso permite que inserções de várias linhas sejam reproduzidas corretamente em outros servidores em uma configuração de replicação.
Se a coluna AUTO_INCREMENT for parte de vários índices, o MySQL gera valores de sequência usando o índice que começa com a coluna AUTO_INCREMENT, se houver. Por exemplo, se a tabela animais contivesse índices PRIMARY KEY (grp, id) e INDEX (id), o MySQL ignoraria a PRIMARY KEY para gerar valores de sequência. Como resultado, a tabela conteria uma única sequência, não uma sequência por valor grp.
Para começar com um valor AUTO_INCREMENT diferente de 1, defina esse valor com CREATE TABLE ou ALTER TABLE, assim:
mysql> ALTER TABLE tbl AUTO_INCREMENT =100;InnoDB Notas
Para tabelas InnoDB, tenha cuidado se você modificar a coluna que contém o valor de incremento automático no meio de uma sequência de instruções INSERT. Por exemplo, se você usar uma instrução UPDATE para colocar um valor novo e maior na coluna de incremento automático, um INSERT subsequente poderá encontrar um erro de “Entrada Duplicada”. O teste se um valor de incremento automático já está presente ocorre se você fizer um DELETE seguido por mais instruções INSERT ou quando você COMMIT a transação, mas não após uma instrução UPDATE.
Notas do MyISAM
Para tabelas MyISAM, você pode especificar AUTO_INCREMENT em uma coluna secundária em um índice de várias colunas. Nesse caso, o valor gerado para a coluna AUTO_INCREMENT é calculado como MAX(auto_increment_column) + 1 WHERE prefix=given-prefix. Isso é útil quando você deseja 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) ) ENGINE=MyISAM; 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; Which returns: +--------+----+---------+ | grp | id | name | +--------+----+---------+ | fish | 1 | lax | | mammal | 1 | dog | | mammal | 2 | cat | | mammal | 3 | whale | | bird | 1 | penguin | | bird | 2 | ostrich | +--------+----+---------+
Nesse caso (quando a coluna AUTO_INCREMENT faz parte de um índice de várias colunas), os valores AUTO_INCREMENT são reutilizados se você excluir a linha com o maior valor AUTO_INCREMENT em qualquer grupo. Isso acontece mesmo para tabelas MyISAM, para as quais os valores AUTO_INCREMENT normalmente não são reutilizados.
Leitura adicional
Mais informações sobre AUTO_INCREMENT estão disponíveis aqui:
Como atribuir o atributo AUTO_INCREMENT a uma coluna:Seção 13.1.17, “Sintaxe CREATE TABLE”, e Seção 13.1.7, “Sintaxe ALTER TABLE”.
Como AUTO_INCREMENT se comporta dependendo do modo SQL NO_AUTO_VALUE_ON_ZERO:Seção 5.1.7, “Modos SQL do Servidor”.
Como usar a função LAST_INSERT_ID() para localizar a linha que contém o valor AUTO_INCREMENT mais recente:Seção 12.14, “Funções de informação”.
Configurando o valor AUTO_INCREMENT a ser usado:Seção 5.1.4, “Variáveis do sistema do servidor”.
AUTO_INCREMENT e replicação:Seção 16.4.1.1, “Replicação e AUTO_INCREMENT”.
Variáveis do sistema do servidor relacionadas a AUTO_INCREMENT (auto_increment_increment e auto_increment_offset) que podem ser usadas para replicação:Seção 5.1.4, “Variáveis do sistema do servidor”.
http://search.oracle.com/search/search?q=auto_increment&group=Documentation&x=0&y=0