[Experiencia de desarrollo] ¡mysql evita de manera efectiva que la base de datos se elimine y se escape!


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';

inserte la descripción de la imagen aquí

El estado predeterminado es APAGADO, puede establecer el estado en ENCENDIDO:

  • set sql_safe_updates=1;//Abierto
  • set 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 updatedeclaración debe cumplir una de las siguientes condiciones para ejecutarse correctamente

  1. Use la cláusula where, y la columna en la cláusula where debe ser la columna de índice de prefijo
  2. límite de uso
  3. 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)

deleteLa declaración debe cumplir una de las siguientes condiciones para ejecutarse correctamente

  1. Use la cláusula where, y la columna en la cláusula where debe ser la columna de índice de prefijo
  2. 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.

Supongo que te gusta

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