Questão de Banco de Dados — Consultas e Comandos em SQL — FGV 2024
- Código
- fg165236
- Banca
- FGV
- Órgão
- TJ MS
- Ano
- 2024
- Cargo
- Tec NS ( )
- ASET TABLE
- BALTER TABLE
- CDROP TABLE
- DDELETE TABLE
- ETRUNCATE TABLE
GabaritoE — TRUNCATE TABLE
Gabarito: letra E — o comando TRUNCATE TABLE apaga todos os dados de uma tabela, mantendo a sua estrutura (colunas, índices, constraints). É a ferramenta certa para o analista que quer limpar a tabela TAB_CADASTRO após uma carga com erros, sem perder a definição da tabela. As demais alternativas ou não existem (SET TABLE, DELETE TABLE) ou têm outra finalidade (ALTER TABLE altera a estrutura, DROP TABLE remove a tabela inteira).
O comando TRUNCATE TABLE pertence à sublinguagem DDL (Data Definition Language), assim como CREATE, ALTER e DROP. Ele remove todas as linhas de uma tabela de uma só vez, de forma rápida e sem registrar cada exclusão individualmente no log de transações (em muitos SGBDs). Por isso, é a opção ideal quando se deseja esvaziar completamente uma tabela, mantendo sua estrutura para uma nova carga.
A diferença crucial está entre TRUNCATE e DELETE. O DELETE é um comando da DML (Data Manipulation Language) e permite excluir linhas específicas com a cláusula WHERE, além de disparar triggers e registrar cada exclusão no log. O TRUNCATE não aceita WHERE, não dispara triggers (na maioria dos bancos) e é mais rápido, mas não pode ser desfeito com ROLLBACK em alguns SGBDs (como o MySQL) — embora no PostgreSQL e SQL Server seja possível reverter dentro de uma transação.
Vejamos um exemplo prático: se o analista executasse DELETE FROM TAB_CADASTRO; sem WHERE, apagaria todas as linhas, mas o comando seria registrado linha a linha, o que é mais lento e pode ser revertido. Já TRUNCATE TABLE TAB_CADASTRO; remove tudo de forma atômica e rápida, mas não permite filtrar — exatamente o que o enunciado pede: apagar os dados mantendo a estrutura.
A pegadinha da banca está em confundir TRUNCATE com DROP. O DROP TABLE remove a tabela inteira, incluindo sua estrutura, dados, índices e privilégios — o oposto do que se deseja. Já o ALTER TABLE serve para modificar a estrutura (adicionar/remover colunas, alterar tipos), não para apagar dados. E SET TABLE e DELETE TABLE simplesmente não existem na sintaxe SQL padrão.
Guarde a fronteira: TRUNCATE = apaga dados, mantém estrutura; DROP = apaga tudo; DELETE = apaga linhas específicas (ou todas, com WHERE). É nessa distinção que as alternativas se separam.
SET TABLE não é um comando SQL válido. O SET é usado em UPDATE (para atribuir valores) ou em comandos de configuração de sessão, mas não existe SET TABLE para apagar dados. O candidato pode confundir com SET do UPDATE, mas aqui não há essa função.
ALTER TABLE é usado para modificar a estrutura da tabela: adicionar, excluir ou alterar colunas, e adicionar/remover restrições. Não apaga dados. Se o analista quisesse, por exemplo, adicionar uma coluna, usaria ALTER TABLE TAB_CADASTRO ADD .... Para apagar dados, não serve.
DROP TABLE remove a tabela inteira, incluindo sua estrutura, dados, índices e privilégios. O enunciado pede para apagar apenas os dados, mantendo a estrutura — portanto, DROP é exatamente o oposto do que se deseja. É a pegadinha clássica: quem confunde TRUNCATE com DROP erra esta questão.
DELETE TABLE não é uma sintaxe válida. O comando correto para excluir linhas é DELETE FROM nome_da_tabela [WHERE condição]. A ausência do FROM torna o comando inválido. Além disso, mesmo que fosse DELETE FROM, ele apagaria as linhas, mas de forma diferente do TRUNCATE (mais lento, com log, e permitindo WHERE).
TRUNCATE TABLE é o comando da DDL que remove todas as linhas de uma tabela, mantendo sua estrutura (colunas, índices, constraints). É exatamente o que o analista precisa: apagar os dados carregados com erros, sem destruir a tabela, para poder refazer a carga. A sintaxe é TRUNCATE TABLE TAB_CADASTRO;.
Para não confundir na prova, lembre-se da tríade: TRUNCATE (apaga dados, mantém estrutura), DROP (apaga tudo), DELETE (apaga linhas específicas). Se a questão pedir "apagar todos os dados mantendo a estrutura", a resposta é sempre TRUNCATE. Se pedir "apagar a tabela inteira", é DROP. Se pedir "apagar registros específicos", é DELETE FROM ... WHERE.
Gabarito: letra E
Link permanente: /questoes/fg165236