Gerador de SQL INSERT

Gere comandos INSERT para MySQL, PostgreSQL, SQL Server e SQLite com dados fake para testes.

O Que é o Comando INSERT?

O comando INSERT é uma das operações fundamentais do SQL (Structured Query Language), utilizado para adicionar novos registros em uma tabela de banco de dados. É parte das operações CRUD (Create, Read, Update, Delete) e é essencial para qualquer aplicação que trabalhe com persistência de dados.

A sintaxe básica do INSERT permite inserir uma ou mais linhas de dados em uma tabela, especificando os valores para cada coluna. Diferentes sistemas de gerenciamento de banco de dados (SGBDs) podem ter pequenas variações na sintaxe.

Sintaxe do INSERT por Banco de Dados

MySQL

INSERT INTO `tabela` (`coluna1`, `coluna2`) VALUES ('valor1', 'valor2');

-- Insert multiplo
INSERT INTO `tabela` (`coluna1`, `coluna2`) VALUES
  ('valor1', 'valor2'),
  ('valor3', 'valor4');

PostgreSQL

INSERT INTO "tabela" ("coluna1", "coluna2") VALUES ('valor1', 'valor2');

-- Com RETURNING para obter o ID inserido
INSERT INTO "tabela" ("coluna1") VALUES ('valor') RETURNING id;

SQL Server

INSERT INTO [tabela] ([coluna1], [coluna2]) VALUES ('valor1', 'valor2');

-- Com OUTPUT para obter valores inseridos
INSERT INTO [tabela] ([coluna1]) OUTPUT INSERTED.id VALUES ('valor');

SQLite

INSERT INTO "tabela" ("coluna1", "coluna2") VALUES ('valor1', 'valor2');

-- INSERT OR REPLACE para upsert
INSERT OR REPLACE INTO "tabela" ("id", "coluna1") VALUES (1, 'valor');

Diferenças Entre Bancos de Dados

  • Identificadores: MySQL usa crases (`), PostgreSQL e SQLite usam aspas duplas ("), SQL Server usa colchetes ([])
  • Auto incremento: MySQL usa AUTO_INCREMENT, PostgreSQL usa SERIAL/IDENTITY, SQL Server usa IDENTITY, SQLite usa AUTOINCREMENT
  • Booleanos: PostgreSQL aceita TRUE/FALSE literais, outros usam 1/0
  • Limite de linhas: SQL Server limita 1000 linhas por INSERT VALUES
  • Strings vazias: Oracle trata strings vazias como NULL, outros bancos não

Boas Práticas para INSERT em Batch

  • Use transações: Envolva múltiplos INSERTs em BEGIN TRANSACTION/COMMIT para garantir atomicidade e melhorar performance
  • Especifique colunas: Sempre liste os nomes das colunas para evitar problemas quando a estrutura da tabela mudar
  • Valide dados: Verifique tipos e restrições antes de inserir para evitar erros em cascata
  • Prepare statements: Use prepared statements para evitar SQL injection e melhorar performance em inserções repetitivas
  • Considere BULK INSERT: Para grandes volumes, use ferramentas específicas como LOAD DATA INFILE (MySQL) ou COPY (PostgreSQL)

Casos de Uso

  • Testes de software: Popular bancos de dados de teste com dados realistas
  • Seeding de banco: Criar dados iniciais para desenvolvimento e staging
  • Migração de dados: Gerar scripts para transferir dados entre sistemas
  • Protótipos: Criar rapidamente dados para demonstrações e POCs
  • Aprendizado: Praticar SQL com dados de exemplo

Escaping e Segurança

O gerador automaticamente escapa valores de texto para prevenir erros de sintaxe. Aspas simples dentro de strings são duplicadas (padrão SQL). No entanto, para aplicações em produção, sempre use prepared statements/parametrização para prevenir SQL injection.

-- Exemplo de prepared statement (pseudocodigo)
$stmt = $pdo->prepare("INSERT INTO users (name) VALUES (?)");
$stmt->execute([$userName]);

Templates Disponíveis

  • users: Tabela padrão para usuários com id, name, email e created_at
  • products: Tabela de produtos com id, name, price e stock
  • orders: Tabela de pedidos com id, user_id, total e status
  • customers: Tabela de clientes com dados de contato
  • posts: Tabela de postagens/blog com título e conteúdo

Perguntas Frequentes

Como inserir dados em múltiplas tabelas relacionadas?

Primeiro insira na tabela pai para obter o ID gerado, depois use esse ID nas inserções das tabelas filhas. Use transações para garantir a consistência dos dados.

Qual a diferença entre INSERT e INSERT IGNORE?

INSERT IGNORE (MySQL) ignora erros de duplicidade e continua a execução. No PostgreSQL, o comportamento similar é obtido com ON CONFLICT DO NOTHING.

Como fazer upsert (insert or update)?

Cada banco tem sua sintaxe: MySQL usa INSERT ... ON DUPLICATE KEY UPDATE, PostgreSQL usa INSERT ... ON CONFLICT ... DO UPDATE, SQL Server usa MERGE e SQLite usa INSERT OR REPLACE.

Os dados gerados sao reais?

Não. Os dados são fictícios, gerados aleatoriamente para fins de teste. Nomes, emails e outros valores não correspondem a pessoas reais.

Posso usar o SQL gerado em produção?

O SQL gerado é sintaticamente correto, mas os dados são de teste. Use apenas para desenvolvimento, testes, seeding de bancos e aprendizado.

Aviso Legal

Este gerador cria dados fictícios para fins de teste e desenvolvimento. Os dados gerados não representam informações reais e não devem ser usados em ambientes de produção. Sempre valide e sanitize dados em aplicações reais.