Diretório de artigos
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';
O padrão é o estado OFF, você pode definir o estado para ON:
set sql_safe_updates=1;
//Abertoset 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 update
instrução deve atender a uma das seguintes condições para ser executada com êxito
- Use a cláusula where e a coluna na cláusula where deve ser a coluna de índice de prefixo
- limite de uso
- 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)
delete
A instrução deve atender a uma das seguintes condições para ser executada com êxito
- Use a cláusula where e a coluna na cláusula where deve ser a coluna de índice de prefixo
- 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.