// aula 02 · SQL · DML

INSERT, UPDATE e DELETE —
Manipulando dados


O que é DML?

Data Manipulation Language

DML é o subconjunto do SQL que manipula os dados dentro das tabelas — inserindo, alterando e removendo registros. Diferente do DDL (que cria e altera estruturas), o DML opera sobre o conteúdo. Os três comandos principais são INSERT, UPDATE e DELETE.


INSERT — adicionando registros

INSERT INTO

Inserir um ou vários registros na tabela

Sempre especifique as colunas — não dependa da ordem da tabela. Se uma coluna tem valor padrão (DEFAULT) ou é AUTO_INCREMENT, pode omiti-la.

Inserir múltiplos registros de uma vez é muito mais eficiente do que múltiplos INSERTs separados.

-- Inserir um registro
INSERT INTO clientes (nome, cidade, idade, ativo)
VALUES ('Fernanda Lima', 'Curitiba', 27, 1);

-- Inserir múltiplos registros de uma vez
INSERT INTO clientes (nome, cidade, idade, ativo)
VALUES
  ('Roberto Gomes', 'Salvador', 33, 1),
  ('Camila Torres', 'Recife',  25, 0),
  ('Diego Alves',   'Fortaleza',38, 1);

-- Inserir a partir de outra tabela (INSERT SELECT)
INSERT INTO clientes_inativos
SELECT * FROM clientes WHERE ativo = 0;

UPDATE — alterando registros

UPDATE

Alterar dados existentes na tabela

O SET define os novos valores. O WHERE define quais linhas serão afetadas. Sem WHERE, todos os registros serão alterados!

Regra de ouro: nunca faça um UPDATE sem WHERE (a não ser que realmente queira alterar todos os registros). Antes de executar, rode um SELECT com o mesmo WHERE para conferir quantas linhas serão afetadas.

-- Atualizar um campo
UPDATE clientes
SET cidade = 'Campinas'
WHERE id = 3;

-- Atualizar múltiplos campos
UPDATE clientes
SET cidade = 'Porto Alegre', ativo = 1
WHERE id = 3;

-- Atualizar com cálculo
UPDATE produtos
SET preco = preco * 1.10   -- reajuste de 10%
WHERE categoria = 'eletrônicos';

-- ✅ Boa prática: confira antes com SELECT
SELECT * FROM clientes WHERE id = 3;
-- depois execute o UPDATE

DELETE — removendo registros

DELETE

Remover registros da tabela

Remove linhas que atendem à condição. Sem WHERE, apaga todos os registros da tabela (mas mantém a estrutura). Operação irreversível — não tem Ctrl+Z!

Cuidado redobrado: DELETE sem WHERE apaga tudo. Sempre verifique com SELECT antes. Em produção, considere fazer um backup ou usar transações (BEGIN TRANSACTION) para poder fazer rollback.

-- Deletar um registro específico
DELETE FROM clientes
WHERE id = 3;

-- Deletar com condição
DELETE FROM clientes
WHERE ativo = 0;

-- ⚠️ PERIGO: apaga TUDO (sem WHERE)
-- DELETE FROM clientes;

-- Usando transação para segurança
BEGIN TRANSACTION;
  DELETE FROM clientes WHERE id = 3;
  -- se estiver certo:
COMMIT;
  -- se não estiver certo:
-- ROLLBACK;

DELETE vs TRUNCATE vs DROP

DELETE

Remove linhas com ou sem condição. Pode ser revertido com ROLLBACK. Mais lento em tabelas grandes pois registra cada linha no log.

TRUNCATE

Remove todos os registros de uma vez. Mais rápido que DELETE pois não loga cada linha. Reseta contadores AUTO_INCREMENT. Não aceita WHERE.

DROP TABLE

Remove a tabela inteira — estrutura e dados. Não tem volta. Use quando quer eliminar a tabela do banco definitivamente.