Vai dar M! Parte 2 – Banco de Dados. Cuidado para não ter prejuízos.



Uma das áreas da programação que tem ganhado bastante destaque  é a programação com Banco de Dados com a linguagem SQL, independente o sistema gerenciador de banco de dados (SGBD) usado: como MySQL, SQL Server e etc.

As atuais ferramentas de programação de banco de dados que dão suporte à linguagens baseadas em SQL oferecem uma série de recursos que facilitam a execução de comandos, porém, É MUITO IMPORTANTE SABER como esses recursos podem e devem ser utilizados, principalmente aqueles que envolvem a execução personalizada de trechos “selecionados” de instruções em SQL.

Todos nós sabemos que é natural durante a programação errarmos trechos de comandos ou esquecer linhas de código, contribuindo para um mau funcionamento de um sistema, mas na pior das hipóteses (embora não é isso que desejo), e melhor um sistema pare de funcionar momentaneamente por falha de programação do que esquecer uma condição em uma instrução em SQL dentro de uma instrução UPDATE ou DELETE, que pode acarretar em UMA PERDA IRREVERSÍVEL DE DADOS (na casa de milhares ou milhões de registros), pois softwares podem ser substituídos em casos de problemas, mas os dados deletados acidentalmente de banco de dados (caso não tenha o backup deles) é algo muito grave.



1) Execuções SQL acidentais que não causam prejuízos

É natural quando escrevemos uma instrução em SQL realizarmos testes de sua execução completa ou parte de seu código (fazendo uma seleção específica). É nessas horas que precisamos tomar cuidado com o que vai selecionar , ou melhor, deixar de selecionar, acarretando em uma execução não desejada.

Vamos supor a seguinte situação: Você possui uma base de dados em MySQL que possui inúmeros registros de funcionários (em uma tabela chamada “funcionarios”) e você precisa realizar uma filtragem dos funcionários pelo seu cargo (supondo por exemplo o cargo de “ANALISTA DE SISTEMAS”), usando o bom e velho comando SELECT. Para essa demonstração considere a instrução MySQL abaixo:

select * from funcionarios
where cargo = "ANALISTA DE SISTEMAS";

Suponha agora que você precise executar a consulta mostrada acima, realizando a seleção da mesma (e efetuando a execução de comandos SQL baseado no que foi selecionado). É muito comum que, acidentalmente, selecionemos o comando dessa forma:

Vai dar M! #2 - Banco de Dados.
Código selecionado de forma incompleta

Ao executarmos a consulta acima, retornaremos acidentalmente todos os funcionários cadastrados no banco de dados, porém, isso não acarretará em nenhuma perda ou dano aos dados cadastrados (ainda bem!).

 

2) Execuções SQL acidentais prejudicais ao Banco (da pra consertar)

Agora diferente do que foi mostrado acima, vamos considerar agora uma nova situação. Suponha que você precisa ATUALIZAR todos os salários dos funcionários do cargo de “GERENTE” para R$ 6.500,00. Sabemos que o comando SQL que precisamos utilizar é o UPDATE para essa situação. Vamos considerar para o objetivo proposto a execução do seguinte código em MySQL abaixo:

update funcionarios set salario=6500.00
where cargo = 'GERENTE';

Suponha agora que você precise executar a consulta mostrada acima, realizando a seleção da mesma de forma ERRADA como podemos ver na figura abaixo:

Vai dar M! #2 - Banco de Dados.
Selecionando o comando de forma errada, novamente.

Se executarmos esse comando somente pela seleção, teremos um PREJUÍZO GRANDE , atualizando todos os salários dos funcionários independente do cargo para R$ 6.500,00 (quem dera!).

A atualização de todos os valores do campo salário para todos os funcionários, apesar de ser um prejuízo, ainda é reversível, podendo ser consertado executando vários comandos UPDATES atualizando os salários dos respectivos cargos.

 

3) Execuções SQL acidentais irreversíveis (Agora já era!)

Continuando como uso do comando UPDATE, suponha a seguinte situação onde precisamos mudar o nome de um funcionário específico (pelo seu código), e a execução acontecesse pela seleção dessa forma (de forma errada):

Vai dar M! #2 - Banco de Dados.

A execução do código acima acarretaria em todos os funcionários com o mesmo nome “Roberto Augusto” (imagine isso em uma tabela com milhares de funcionários? Seria um prejuízo total).

Agora imagine que precisamos ter que deletar um funcionário específico pelo seu “id” e realizamos isso desta forma:

Vai dar M! #2 - Banco de Dados.

Nem preciso dizer que a execução do comando selecionado acima acarretará em PERDA TOTAL DOS DADOS da tabela de funcionários não é ?

 

4) Conclusão

Neste POST vimos que sempre temos que tomar muito cuidado como vamos selecionar os comandos SQL, para não acarretar em prejuízos irreversíveis. Há algumas ferramentas de SQL que já  são inteligentes o suficiente para detectar quando um UPDATE ou DELETE e executado sem a cláusula WHERE, perguntando ou proibindo a sua execução.

Bom pessoal, por hoje é só. Espero que tenham gostado desse POST. Qualquer dúvida, fique a vontade para perguntar.

Um forte abraço para todos…

Deixe um comentário