SQL - Comparando Auto Incremento com maior registro inserido

26/03/2021

6

Este post trata-se de uma dica e não de uma dúvida.

Caso de uso: Foi detectado que em uma base de dados MySQL em específico uma ou mais tabelas estão com o Auto Incremento maior que a chave primária do último registro inserido. Ex.: Tabela possui 4 registros inseridos e ao invés do auto incremento estar para ser o 5º registro, foi detectado estar para ser o 10º registro.

Como corrigir?
Há duas maneiras, a primeira é o modo arcaico indo tabela a tabela fazendo um select e comparando com o auto incremento dela. Mas isso pode levar muito tempo (horas ou até dias quando se tem mais de uma base de dados para verificar).
E há o modo dinâmico. No modo dinâmeico você pode usar a query que criei para mostrar isto:

SELECT DISTINCT
  CONCAT('SELECT ','''',C.TABLE_NAME,'''',' AS ','''','Tabela','''',',',T.AUTO_INCREMENT,' AS ','''','Auto_incremento','''',',','MAX(',C.COLUMN_NAME,') AS ','''','Ultima_chave','''',',','''',C.COLUMN_NAME,'''',' AS ','''','Campo','''',' FROM ',C.TABLE_NAME,' UNION ') QUERY
FROM information_schema.COLUMNS C
  JOIN information_schema.TABLES T ON
    T.TABLE_NAME=C.TABLE_NAME AND
    T.TABLE_SCHEMA=C.TABLE_SCHEMA
WHERE C.TABLE_SCHEMA=DATABASE()
    AND C.COLUMN_KEY='PRI'
    AND T.AUTO_INCREMENT IS NOT NULL;


Ao executar esta query será query, será gerado vários select buscando do banco que está definido pelo "USE DATABASE". Será preciso remover na última linha a palavra UNION e trocar para ";" (somente na última linha).

Ao rodar os select será possível visualizar qual o valor que está no auto incremento e qual o ultimo registro de cahve primária inserido. Facilitando o trabalho de pesquisar um a um.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar