Conversor de CSV para SQL (gerador de instruções INSERT)
Converte arquivos CSV em instruções SQL INSERT e CREATE TABLE. Compatível com os dialetos MySQL, PostgreSQL e SQLite, com detecção automática do tipo de coluna (inteiro, decimal, texto). A conversão ocorre inteiramente no navegador; os dados nunca são enviados a um servidor.
| Delimitador |
|
|---|---|
| Usar a primeira linha como cabeçalho | |
| Nome da tabela | |
| Dialeto SQL |
|
| Gerar também a instrução CREATE TABLE | |
| Tratar valores vazios como NULL | |
| Combinar linhas em uma única instrução INSERT |
Digite dados CSV para ver aqui o SQL gerado.
Como uma linha do CSV corresponde a uma instrução INSERT
| Uma linha do CSV | name,age,city |
|---|---|
| Instrução INSERT resultante | INSERT INTO `my_table` (`name`, `age`, `city`) VALUES ('Alice', 30, 'Tokyo'); |
Quando a primeira linha é usada como cabeçalho, cada linha seguinte se torna uma instrução INSERT que nomeia as colunas do cabeçalho. Colunas detectadas como inteiro ou decimal são exibidas como números sem aspas, e as demais são exibidas como strings entre aspas simples.
Dicas
- O tipo de cada coluna (inteiro, decimal, texto) é inferido automaticamente examinando todas as linhas de dados dessa coluna. Se mesmo um único valor não for numérico, a coluna inteira é tratada como tipo texto.
- Ao ativar "Combinar linhas em uma única instrução INSERT", gera-se uma única instrução `INSERT INTO ... VALUES (...), (...), (...);`, reduzindo o número de execuções necessárias para carregar grandes conjuntos de dados.
- O MySQL usa acento grave (`) para delimitar identificadores, enquanto PostgreSQL e SQLite usam aspas duplas ("). O estilo de aspas muda automaticamente conforme o dialeto SQL selecionado.
- Ao desativar "Tratar valores vazios como NULL", as colunas de texto exibem strings vazias ('') e as colunas numéricas exibem NULL em seu lugar.
Perguntas frequentes
Curiosidade — por que instruções INSERT combinadas são mais rápidas
A opção desta ferramenta para "combinar linhas em uma única instrução INSERT" (`INSERT INTO t VALUES (1,'a'), (2,'b'), ...;`) pode ser executada consideravelmente mais rápido do que emitir uma instrução INSERT por linha. Isso ocorre porque reduz a sobrecarga de analisar e planejar cada instrução SQL, além do custo das confirmações de transação que, do contrário, se repetiriam a cada instrução.
Dito isso, o MySQL possui um limite `max_allowed_packet`, e o PostgreSQL tem um limite semelhante no buffer de comunicação, portanto colocar linhas demais em uma única instrução INSERT pode ultrapassar esses limites e causar um erro. Na prática, dividir as instruções a cada algumas centenas ou milhares de linhas é a abordagem comum.
Carregar dados CSV em um banco de dados de teste costuma ser chamado de "seeding" nos fluxos de desenvolvimento, e muitos frameworks web — incluindo os seeders e factories do Laravel — oferecem mecanismos dedicados exatamente para essa tarefa. Um conversor rápido como este continua útil para verificações em pequena escala ou migrações de dados que não justificam montar toda essa infraestrutura.