O que é incremento automático?
O incremento automático é uma função que opera em tipos de dados numéricos. Ele gera automaticamente valores numéricos sequenciais sempre que um registro é inserido em uma tabela para um campo definido como incremento automático.
Quando usar o incremento automático?
Na lição sobre normalização de banco de dados, vimos como os dados podem ser armazenados com redundância mínima, armazenando dados em muitas tabelas pequenas, relacionadas entre si usando chaves primárias e estrangeiras.
Uma chave primária deve ser exclusiva, pois identifica exclusivamente uma linha em um banco de dados. Mas, como podemos garantir que a chave primária seja sempre única? Uma das soluções possíveis seria, usar uma fórmula para gerar a chave primária, que verifica a existência da chave, na tabela, antes de adicionar os dados. Isso pode funcionar bem, mas como você pode ver, a abordagem é complexa e não infalível. Para evitar tal complexidade e garantir que a chave primária seja sempre única, podemos usar o recurso de incremento automático do MySQL para gerar chaves primárias. O incremento automático é usado com o tipo de dados INT. O tipo de dados INT oferece suporte a valores assinados e não assinados. Os tipos de dados sem sinal só podem conter números positivos. Como prática recomendada, é recomendável definir a restrição não assinada na chave primária de incremento automático.
Sintaxe de incremento automático
Vejamos agora o script usado para criar a tabela de categorias de filmes.
CREATE TABLE `categories` (`category_id` int(11) AUTO_INCREMENT,`category_name` varchar(150) DEFAULT NULL,`remarks` varchar(500) DEFAULT NULL,PRIMARY KEY (`category_id`));
Observe o "AUTO_INCREMENT" no campo category_id. Isso faz com que o Id da categoria seja gerado automaticamente sempre que uma nova linha for inserida na tabela. Não é fornecido ao inserir dados na tabela, o MySQL os gera.
Por padrão, o valor inicial para AUTO_INCREMENT é 1 e aumentará em 1 para cada novo registro
Vamos examinar o conteúdo atual da tabela de categorias.
SELECT * FROM `categories`;
Executar o script acima no ambiente de trabalho MySQL no myflixdb nos dá os seguintes resultados.
category_id | category_name | remarks |
---|---|---|
1 | Comedy | Movies with humour |
2 | Romantic | Love stories |
3 | Epic | Story acient movies |
4 | Horror | NULL |
5 | Science Fiction | NULL |
6 | Thriller | NULL |
7 | Action | NULL |
8 | Romantic Comedy | NULL |
Agora vamos inserir uma nova categoria na tabela de categorias.
INSERT INTO `categories` (`category_name`) VALUES ('Cartoons');
A execução do script acima no myflixdb no ambiente de trabalho MySQL nos dá os seguintes resultados mostrados abaixo.
category_id | category_name | remarks |
---|---|---|
1 | Comedy | Movies with humour |
2 | Romantic | Love stories |
3 | Epic | Story acient movies |
4 | Horror | NULL |
5 | Science Fiction | NULL |
6 | Thriller | NULL |
7 | Action | NULL |
8 | Romantic Comedy | NULL |
9 | Cartoons | NULL |
Observe que não fornecemos o id da categoria. O MySQL o gerou automaticamente para nós porque o id da categoria é definido como incremento automático.
Se você deseja obter o último id de inserção gerado pelo MySQL, você pode usar a função LAST_INSERT_ID para fazer isso. O script mostrado abaixo obtém o último id gerado.
SELECT LAST_INSERT_ID();
A execução do script acima fornece o último número de incremento automático gerado pela consulta INSERT. Os resultados são mostrados abaixo.
Resumo
- O atributo de incremento automático, quando especificado em uma coluna com tipos de dados numéricos, gera números sequencialmente sempre que uma nova linha é adicionada ao banco de dados.
- O incremento automático é comumente usado para gerar chaves primárias.
- O tipo de dados definido no incremento automático deve ser grande o suficiente para acomodar muitos registros. Definir TINYINT como o tipo de dados para um campo de incremento automático limita o número de registros que podem ser adicionados à tabela para 255 apenas, uma vez que quaisquer valores além desse não seriam aceitos pelo tipo de dados TINYINT.
- É considerado uma boa prática especificar a restrição não assinada em chaves primárias de incremento automático para evitar números negativos.
- Quando uma linha é excluída de uma tabela, seu ID incrementado automaticamente não é reutilizado. O MySQL continua gerando novos números sequencialmente.
- Por padrão, o valor inicial para AUTO_INCREMENT é 1 e aumentará em 1 para cada novo registro
- Para permitir que a sequência AUTO_INCREMENT comece com outro valor, use AUTO_INCREMENT = 10