Directorio de artículos
Debe haber escuchado que, debido a errores personales, algunos desarrolladores no agregaron una declaración where a la declaración de eliminación o actualización, lo que generó confusión en toda la tabla de datos.
Modo de seguridad de MySQL: MySQL informará un error cuando encuentre que las declaraciones de eliminación y actualización no agregan condiciones de límite o de ubicación. No se ejecutará todo el sql, lo que evitará la eliminación accidental de tablas.
Configuración del modo seguro
Verifique el estado con el siguiente comando en mysql:
show variables like 'sql_safe_updates';
El estado predeterminado es APAGADO, puede establecer el estado en ENCENDIDO:
set sql_safe_updates=1;
//Abiertoset sql_safe_updates=0;
//cierre
Después de establecer en ON
- Declaración de actualización : cuando no hay un índice disponible para la columna (columna) en la condición donde y no hay límite, la actualización será rechazada. Cuando la condición where es constante y no hay límite, la actualización será rechazada.
- declaración de eliminación: ① donde la condición es constante, ② o donde la condición está vacía, ③ o donde no hay índice disponible para la columna (columna) y no hay límite para rechazar la eliminación.
prueba
Abre el modo seguro para probar
1. Actualizar y eliminar sin donde
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. Eliminación de claves no 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
Si la condición de eliminación no es una clave de índice, debe agregar un límite.
delete from t_user where name='123' limit 1
delete from t_user where name='123' limit 1
> Affected rows: 0
> 时间: 0.002s
3. eliminar la clave de índice
delete from t_user where group_id='123'
delete from t_user where group_id='123'
> Affected rows: 0
> 时间: 0s
Resumir
Si se establece sql_safe_updates=1
, la update
declaración debe cumplir una de las siguientes condiciones para ejecutarse correctamente
- Use la cláusula where, y la columna en la cláusula where debe ser la columna de índice de prefijo
- límite de uso
- Use la cláusula where y el límite al mismo tiempo (la columna en la cláusula where puede no ser una columna de índice en este momento)
delete
La declaración debe cumplir una de las siguientes condiciones para ejecutarse correctamente
- Use la cláusula where, y la columna en la cláusula where debe ser la columna de índice de prefijo
- Utilice la cláusula where y el límite al mismo tiempo (la columna de la cláusula where puede no ser una columna de índice en este momento)
para ejecutar correctamente.