• Roger Sampaio

Dia de maldade: UPDATE, DELETE sem WHERE

Atualizado: 10 de Nov de 2020

Se você é da área de dados (Administrador de Banco de Dados, Administrador de Dados, Analista de BI...) aposto que já riu após ler o texto, certo? Não diga que não, sei que você riu se não foi uma ‘gaitada’, foi no mínimo um riso uma risada na sua mente, porque você sabe do que estou falando. E para você que não entendeu a piada porque não é da área, não pule esse artigo, leia com calma, o pai vai explicar passo a passo.

UPDATE, DELETE são dois comandos da linguagem SQL utilizados para manipular registros em um banco de dados relacional. WHERE é uma palavra reservada usada para impor condições. E para entender melhorar vamos para o exemplo. Você, cara da TI (kkkkk), foi chamado pelo seu tio para montar um ‘sisteminha’ para ajudar nas vendas da loja de peças automotivas dele. E você, esperto ou pelo menos deveria ser (kkkk), já preparou o ambiente com todas as informações que irá precisar baseado na conversa com seu tio. Uma delas é o produto, que tem as seguintes informações: código de identificação (chamaremos de codDoproduto), nome, descrição, preço, tempo de garantia (descrito em meses), nome do fabricante. E de cara, já inseriu alguns registros.

Registros

O preço do motor CrossFox mudou para 3.500 R$ e agora precisamos atualizar esse registro, afinal o seu tio não vai pagar a diferença de 500 e quer dinheiro, lucro. Para isso você usará o comando UPDATE que serve para atualizar registros. A sintaxe (não se assuste com esse nome, é a mesma forma que dizer ‘a forma de escrever’) é:

Substitua ‘nome_tabela’, ‘campo’ e ‘condição’ pelo que deseja fazer. Suponha que você escreve e execute:

Note que será executado perfeitamente, o SGBD não irá reclamar, porque a cláusula WHERE é opcional. Porém ao buscar todos os registros da tabela produto, você repara que atualizou os preços de todos os produtos, dessa maneira:

Meu Deus! Não éramos isso que queríamos fazer, porque na verdade apenas o preço do Motor 1.6 CrossFox é de 3.500, os demais deveriam permanecer o mesmo. Se você é estagiário, bate o desespero e você grita ‘e agora! ‘. Chama o seu chefe e mostra já se preparando para ouvir ‘não precisamos mais do seu serviço, pode ir para casa descansar’. Algumas empresas dão até certificado disso.

Calma, calma! Existe uma luz no fim do túnel. Graças aos SGBDS evoluídos e as habilidades de um DBA, existem formas de desfazer a ação, seja através de um comando ROLLBACK (é como uma máquina do tempo kkk) ou no pior dos casos uma restauração do último backup da base de dados. Mas e aí? Você deve aprender com seus erros e nesse caso o que faltou no comando? A clausula ‘WHERE’ que determina a condição. Note precisamos dizer ao SGBD que queremos atualizar o preço do motor não de todos, mas sim do CrossFox, ou melhor, o produto com código 1, senão dizer nada, ele subtende que é todo mundo.

Agora, sim o resultado estará correto:

O comando DELETE é bem parecido, porém faz apagar, excluir os registros (que é pior ainda). Rapidão, veja a sintaxe dele:

Substitua ‘nome_tabela’, ‘condição’ pelo que deseja fazer. Suponha que você deseje apagar o registro com o produto ‘Motor Extreme Power’, porque não está sendo mais fabricado. Aí você escreve e executa:

E o resultado é:

Apagou todos os registros ao invés de um único. Não éramos isso que queríamos fazer. Meus Deus! Mais uma vez chegamos na mesma discussão acima: o comando será executado perfeitamente, porque a clausula WHERE é opcional. Você deve dizer ao SGBD que não todos os produtos que serão excluídos, mas apenas o ‘Motor Extreme Power’, ou melhor, produto com código 3.

E desfazendo o último comando e executando o novo DELETE teremos (o produto Motor Extreme Power não existe):

Portanto quando for escrever os comandos UPDATE, DELETE não coce o dedo para teclar ENTER e executá-los sem ao menos observá-los com cuidado (verifique a existência da clausula WHERE com a condição desejada). Pare de ser ‘tarado’ para ver o resultado logo. Você pode estar fazendo ‘cagada’. Pode até haver algumas situações em que não queira usar a clausula WHERE, ou seja, a condição seja para todos os registros, porém é atípico ou pouco utilizado no mundo real. Agora você entendeu porque é engraçado UPDATE, DELETE sem WHERE. Literalmente, você executar isso é fazer uma bagunça nos registros íntegros, certinhos da base de dados e você está num dia da maldade (pouco se importando, tocando o ‘terror geral’).

543 visualizações0 comentário

Posts recentes

Ver tudo