Operações DML: Inserindo, Atualizando e Removendo Registros em SQL

Inserção de Registros

A manipulação de dados em bancos de dados relacionais começa com a inserção de novos registros. A cláusula INSERT INTO permite adicionar linhas a uma tabela. Embora seja possível omitir os nomes das colunas, a boa prática recomenda sempre especificá-los para garantir a integridade dos dados, especialmente se a estrutura da tabela sofrer alterações no futuro.


CREATE TABLE IF NOT EXISTS clientes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome_completo VARCHAR(100) NOT NULL,
    idade INT DEFAULT 18,
    email VARCHAR(150) UNIQUE,
    data_cadastro DATETIME DEFAULT CURRENT_TIMESTAMP,
    cidade VARCHAR(50)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO clientes (nome_completo, idade, email, cidade) 
VALUES ('João Silva', 28, 'joao.silva@email.com', 'São Paulo');

Sintaxe básica de inserção:


INSERT INTO nome_tabela (coluna1, coluna2, ..., colunaN) 
VALUES (valor1, valor2, ..., valorN);

Atualização de Registros

Para modificar dados existentes, utilizamos a instrução UPDATE. É fundamental utilizar a cláusula WHERE para filtrar quais registros serão alterados. Omitir essa cláusula resultará na atualização de todas as linhas da tabela, o que pode causar perda de dados irreversível.


CREATE TABLE IF NOT EXISTS produtos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome_produto VARCHAR(100) NOT NULL,
    preco DECIMAL(10, 2) DEFAULT 0.00,
    estoque INT DEFAULT 0,
    data_atualizacao DATETIME
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO produtos (nome_produto, preco, estoque) VALUES 
('Notebook Gamer', 4500.00, 15),
('Mouse Sem Fio', 120.50, 50);

UPDATE produtos 
SET preco = 4200.00, data_atualizacao = NOW() 
WHERE nome_produto = 'Notebook Gamer';

Sintaxe básica de atualização:


UPDATE nome_tabela 
SET coluna1 = valor1, coluna2 = valor2, ..., colunaN = valorN 
WHERE condicao;

A cláusula WHERE suporta diversos operadores lógicos e de comparação para refinar o filtro:

Operador Descrição Exemplo Resultado
= Igual a 10 = 5 false
<> ou != Diferente de 10 <> 5 true
> Maior que 10 > 5 true
< Menor que 10 < 5 false
>= Maior ou igual a 10 >= 5 true
<= Menor ou igual a 10 <= 5 false
BETWEEN ... AND Intervalo fechado BETWEEN 5 AND 10 [5, 10]
AND E lógico (&&) 10 > 5 AND 10 < 5 false
OR OU lógico (||) 10 > 5 OR 10 < 5 true

É possível combinar múltiplas condições e utilizar funções ou variáveis como valores de atualização:


-- Atualizando com múltiplas condições
UPDATE produtos 
SET estoque = 0, data_atualizacao = CURRENT_TIMESTAMP 
WHERE id = 2 OR preco > 5000;

-- Utilizando funções nativas do banco de dados
UPDATE produtos 
SET data_atualizacao = NOW() 
WHERE nome_produto = 'Mouse Sem Fio';

Remoção de Registros

A exclusão de dados pode ser realizada de forma pontual ou para limpar a tabela completamente. Existem duas abordagens principais: DELETE e TRUNCATE.


CREATE TABLE IF NOT EXISTS logs_acesso (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario VARCHAR(50) NOT NULL,
    acao VARCHAR(100),
    data_registro DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO logs_acesso (usuario, acao) VALUES 
('admin', 'login'),
('user1', 'view_page'),
('user2', 'logout');

-- Remover um registro específico
DELETE FROM logs_acesso WHERE id = 2;

-- Remover todos os registros (mantém a estrutura e o contador de auto incremento no InnoDB)
DELETE FROM logs_acesso; 

-- Limpar a tabela rapidamente (reinicia o contador de auto incremento)
TRUNCATE TABLE logs_acesso;

Sintaxe de remoção:


-- Remoção condicional ou total
DELETE FROM nome_tabela WHERE condicao;
DELETE FROM nome_tabela;

-- Limpeza total da tabela (DDL implícito, mais rápido e reinicia auto incremento)
TRUNCATE TABLE nome_tabela;

Comportamento do Auto Incremento após limpeza:

Ao limpar completamente uma tabela, o comportamento do próximo valor de auto incremento varia conforme o mecanismo de armazenamento:

  • InnoDB: O contador de auto encremento é reiniciado para 1 após um TRUNCATE ou DELETE sem condições, pois o valor máximo é mantido em memória e é perdido ao reiniciar o serviço ou limpar a tabela.
  • MyISAM: O contador é persistido em arquivo. Portanto, mesmo após a exclusão de todos os registros, o próximo valor de auto incremento continuará a sequência do último registro inserido antes da limpeza.

Tags: SQL MySQL DML insert update

Publicado em 7-8 00:49