[Experiência de desenvolvimento] mysql efetivamente impede que o banco de dados seja excluído e fuja!


Você deve ter ouvido que devido a erros pessoais, alguns desenvolvedores não adicionaram uma instrução where à instrução delete ou update, resultando em confusão em todos os dados da tabela.

Modo de segurança do MySQL: o MySQL relatará um erro quando descobrir que as instruções delete e update não adicionam condições where ou limit. Todo o sql não será executado, prevenindo efetivamente a exclusão acidental de tabelas.

Configurações do modo de segurança

Verifique o status com o seguinte comando no mysql:

 show variables like 'sql_safe_updates';

insira a descrição da imagem aqui

O padrão é o estado OFF, você pode definir o estado para ON:

  • set sql_safe_updates=1;//Aberto
  • set sql_safe_updates=0;//fecho

Depois de definido para ON

  • Instrução de atualização : Quando nenhum índice estiver disponível para a coluna (coluna) na condição where e não houver limite limite, a atualização será rejeitada. Quando a condição where for constante e não houver limite, a atualização será rejeitada.
  • instrução delete: ① onde a condição é constante, ② ou onde a condição está vazia, ③ ou onde nenhum índice está disponível para a coluna (coluna) e não há limite para recusar a exclusão.

teste

Abra o modo de segurança para testar

1. Atualize e exclua sem onde

delete from t_user

delete from t_user
> 1175 - You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
> 时间: 0.001s

update t_user set name='123'

update t_user set name='123'
> 1175 - You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
> 时间: 0.001s

2. Exclusão de chaves não indexadas

delete from t_user where name='123'

delete from  t_user where name='123'
> 1175 - You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
> 时间: 0.007s

Se a condição where de delete não for uma chave de índice, você deverá adicionar limit.

delete from t_user where name='123' limit 1

delete from  t_user where name='123' limit 1
> Affected rows: 0
> 时间: 0.002s

3. exclua a chave de índice

delete from t_user where group_id='123'

delete from  t_user where group_id='123'
> Affected rows: 0
> 时间: 0s

Resumir

Se definido sql_safe_updates=1, a updateinstrução deve atender a uma das seguintes condições para ser executada com êxito

  1. Use a cláusula where e a coluna na cláusula where deve ser a coluna de índice de prefixo
  2. limite de uso
  3. Use cláusula where e limite ao mesmo tempo (a coluna na cláusula where pode não ser uma coluna de índice neste momento)

deleteA instrução deve atender a uma das seguintes condições para ser executada com êxito

  1. Use a cláusula where e a coluna na cláusula where deve ser a coluna de índice de prefixo
  2. Use a cláusula where e limit ao mesmo tempo (a coluna na cláusula where pode não ser uma coluna de índice neste momento)
    para executar com êxito.

Acho que você gosta

Origin blog.csdn.net/qq_30285985/article/details/120525460
Recomendado
Clasificación