-- Com todas as colunas
INSERT INTO produtos (
nome,
preco,
categoria,
estoque
) VALUES (
'Smartphone X',
999.99,
'Eletrônicos',
100
);
-- Com colunas específicas
INSERT INTO usuarios (
email,
nome
) VALUES (
'user@email.com',
'João Silva'
);
2. Inserção via SELECT
DATA_TRANSFER_EXPERT demonstra: "Copie dados de outras tabelas!"
-- Inserção básica via SELECT
INSERT INTO produtos_backup
SELECT * FROM produtos
WHERE categoria = 'Eletrônicos';
-- Inserção seletiva
INSERT INTO resumo_vendas (produto, total_vendido)
SELECT
p.nome,
SUM(v.quantidade)
FROM vendas v
JOIN produtos p ON v.produto_id = p.id
GROUP BY p.nome;
3. Valores Default e Expressões
-- Usando DEFAULT
INSERT INTO logs (
evento,
data_registro
) VALUES (
'Login usuário',
DEFAULT -- Usa CURRENT_TIMESTAMP
);
-- Com expressões
INSERT INTO pedidos (
produto_id,
quantidade,
valor_total
) VALUES (
101,
5,
(SELECT preco FROM produtos WHERE id = 101) * 5
);
Tratamento de Erros
ERROR_HANDLER apresenta: "Lidando com conflitos e erros"
-- Ignorar duplicados
INSERT INTO logs (id, mensagem)
ON CONFLICT (id) DO NOTHING;
-- Atualizar em caso de conflito
INSERT INTO produtos (codigo, nome, estoque)
VALUES ('P123', 'Novo Produto', 100)
ON CONFLICT (codigo)
DO UPDATE SET
estoque = produtos.estoque + EXCLUDED.estoque;
-- Inserindo novo produto
INSERT INTO produtos (
codigo,
nome,
descricao,
preco,
estoque,
categoria_id,
criado_em,
status
) VALUES (
'PROD-123',
'Smartphone Ultimate',
'Smartphone de última geração',
1299.99,
50,
(SELECT id FROM categorias WHERE nome = 'Eletrônicos'),
CURRENT_TIMESTAMP,
'ativo'
);
-- Registrando pedido
INSERT INTO pedidos (
cliente_id,
valor_total,
status,
data_pedido
) VALUES (
1001,
1299.99,
'pendente',
CURRENT_TIMESTAMP
);
-- Inserindo itens do pedido
INSERT INTO itens_pedido (
pedido_id,
produto_id,
quantidade,
preco_unitario
) VALUES (
CURRVAL('pedidos_id_seq'),
(SELECT id FROM produtos WHERE codigo = 'PROD-123'),
1,
1299.99
);
Troubleshooting Comum
PROBLEM_SOLVER apresenta soluções para problemas frequentes:
Violação de Chave Única
-- Verificando existência
SELECT COUNT(*)
FROM produtos
WHERE codigo = 'PROD-123';
-- Inserção segura
INSERT INTO produtos (codigo, nome)
SELECT 'PROD-123', 'Novo Produto'
WHERE NOT EXISTS (
SELECT 1
FROM produtos
WHERE codigo = 'PROD-123'
);
Violação de Chave Estrangeira
-- Verificando referência
SELECT id
FROM categorias
WHERE id = 5;
-- Inserção com verificação
INSERT INTO produtos (categoria_id, nome)
SELECT 5, 'Novo Produto'
WHERE EXISTS (
SELECT 1
FROM categorias
WHERE id = 5
);
Conclusão
INSERT_SPECIALIST conclui: "O domínio do INSERT vai além da sintaxe básica. Considere sempre performance, integridade e manutenibilidade em suas operações de inserção."