SQL - Comparando Auto Incremento com maior registro inserido
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:
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.
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.
Chromusmaster
Curtidas 2