Informática

SQL: DDL, DML, DCL e TCL, restrições e transação na prática

Os comandos SQL costumam ser divididos em grupos conforme a finalidade: definir estrutura, manipular dados, controlar acesso e controlar transações. A prova cobra a classificação, o efeito de cada comando e o que acontece quando uma transação é desfeita. Os testes abaixo foram executados em um banco de teste, com dados fictícios.

Os grupos de comandos

Sigla Nome usual Comandos típicos Atua sobre
DDL linguagem de definição de dados CREATE, ALTER, DROP a estrutura (tabelas, índices, visões)
DML linguagem de manipulação de dados INSERT, UPDATE, DELETE as linhas
DQL linguagem de consulta SELECT a leitura
DCL linguagem de controle de dados GRANT, REVOKE permissões
TCL linguagem de controle de transação COMMIT, ROLLBACK, SAVEPOINT confirmação e desfazimento

Atenção: há divergência entre autores. Alguns incluem o SELECT na DML; outros o separam como DQL. TRUNCATE é tratado por muitos como DDL, embora esvazie dados. Quando a questão pede a classificação, vale a que o enunciado ou a bibliografia da banca adota; na dúvida, o critério “estrutura x dados x permissão x transação” ajuda.

DDL na prática: estrutura e restrições

CREATE TABLE processo(
  id INTEGER PRIMARY KEY,
  numero TEXT NOT NULL UNIQUE,
  situacao TEXT DEFAULT 'aberto',
  prazo_dias INTEGER CHECK (prazo_dias > 0)
);

As restrições (constraints) protegem a integridade:

  • PRIMARY KEY: identifica a linha, sem repetição e sem NULL.
  • NOT NULL: proíbe ausência.
  • UNIQUE: proíbe repetição.
  • DEFAULT: valor usado quando nada é informado.
  • CHECK: exige que uma condição seja verdadeira.
  • FOREIGN KEY: obriga o valor a existir na tabela referenciada (integridade referencial).

Inserimos três processos, P-001, P-002 e P-003, com prazos de 10, 30 e 15 dias. A coluna situacao não foi informada e assumiu ‘aberto’ pelo DEFAULT. Depois tentamos três inserções inválidas, e o banco rejeitou todas:

Tentativa Erro obtido
repetir o número P-001 violação da restrição de unicidade
prazo igual a 0 violação do CHECK (prazo maior que zero)
número NULL violação de NOT NULL

A mensagem exata muda conforme o sistema, mas o efeito é o mesmo: o comando falha e nenhuma linha é gravada.

ALTER TABLE processo ADD COLUMN responsavel TEXT acrescentou uma coluna; as linhas existentes ficaram com NULL nela.

DML na prática

UPDATE processo SET situacao = 'arquivado' WHERE numero = 'P-002';

Atualizou 1 linha. O perigo clássico é esquecer o WHERE: UPDATE processo SET situacao = 'arquivado' altera todas as linhas (3, no teste). O mesmo vale para o DELETE.

Transação: COMMIT e ROLLBACK

Uma transação é um conjunto de operações tratado como unidade: ou tudo vale, ou nada vale. As propriedades clássicas são conhecidas pela sigla ACID: atomicidade, consistência, isolamento e durabilidade.

Teste de desfazimento:

  1. BEGIN iniciou a transação.
  2. UPDATE processo SET situacao = 'arquivado' (sem WHERE) alterou 3 linhas; dentro da transação, a consulta mostrou os 3 como arquivados.
  3. ROLLBACK desfez tudo. A consulta seguinte mostrou 2 processos abertos e 1 arquivado, o estado anterior.

Em seguida, outra transação: DELETE FROM processo WHERE situacao = 'arquivado' removeu 1 linha, e o COMMIT tornou a remoção definitiva. Restaram P-001 e P-003. Depois do COMMIT, o ROLLBACK já não recupera nada.

Em alguns sistemas o modo padrão é o de confirmação automática (autocommit): cada comando vira uma transação e é confirmado sozinho, a menos que se abra uma transação explícita. Isso explica por que um DELETE sem WHERE pode ser irreversível sem backup.

DELETE, TRUNCATE e DROP

Comando Efeito Com WHERE?
DELETE remove linhas, preservando a tabela sim
TRUNCATE esvazia a tabela de uma vez não
DROP TABLE remove a tabela inteira, estrutura e dados não

No teste, DELETE FROM processo sem filtro apagou as 2 linhas restantes (a contagem passou a 0, e a tabela continuou existindo). Depois do DROP TABLE, qualquer SELECT na tabela falhou com a mensagem de que a tabela não existe. O comportamento de TRUNCATE em relação a transações varia por sistema, e o SQLite do teste nem o possui; confira o sistema da questão.

DCL: quem pode fazer o quê

GRANT SELECT ON processo TO usuario concede permissão de leitura; REVOKE a retira. O princípio do menor privilégio recomenda dar apenas o necessário para a função. Esse tema se liga à segurança da informação e ao controle de acesso.

Como classificar na prova

  1. A instrução cria, altera ou apaga estrutura? DDL.
  2. Insere, altera ou apaga linhas? DML.
  3. Concede ou retira permissão? DCL.
  4. Confirma, desfaz ou marca ponto de retorno? TCL.

Erros comuns

  • Classificar TRUNCATE como DML sem considerar a divergência de autores; verifique o gabarito da banca.
  • Esquecer o WHERE em UPDATE e DELETE.
  • Achar que ROLLBACK funciona depois do COMMIT.
  • Confundir DROP (apaga a tabela) com DELETE (apaga linhas).
  • Dizer que CHECK e FOREIGN KEY são a mesma coisa.

Fontes e atualização

Não há norma oficial brasileira sobre SQL; o conteúdo segue o padrão da linguagem e a literatura de bancos de dados. Os resultados vieram de execução em um banco de teste. Mensagens de erro, TRUNCATE e autocommit variam por sistema: confira o edital.

Próximos passos

Leia também

Para continuar no site

Viu algo errado, desatualizado ou confuso? Relatar erro nesta página