Modo estricto de Mysql

A partir de la versión 5, existe la posibilidad de ejecutar Mysql en modo estricto. Básicamente lo que controla es cómo Mysql debe responder cuando ciertas sentencias como INSERT o UPADATE intentan establecer valores inválidos o no indican valores requeridos.

Cuándo aplica el modo estricto

Consultando el modo actual de Mysql podremos saber si aplica o no el modo estricto:

  • Si el resultado contiene “TRADITIONAL”, “STRICT_ALL_TABLES” o “STRICT_TRANS_TABLES”, el modo estricto está activado. Según cual de los dos valores esté establecido le comportamiento final difiere un poco (no entraremos en detalles ahora).

Por ejemplo, si la salida es:

STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

entonces, el modo estricto está activado porque aparece el modo “STRICT_TRANS_TABLES”.

  • Si por el contrario, no aparece ninguno de estos dos valores en el resultado, entonces el modo estricto no está establecido.

Detalle del funcionamiento del modo estricto

  • Para tablas transaccionales (ej. InnoDB): se genera un error por valores faltantes o inválidos en una sentencia que cambia datos. La misma es abortada y se vuelven atrás los cambios realizados.
  • Para tablas no transaccionales (ej.MyISAM):
    • Si el valor incorrecto ocurre en la primer fila a ser insertada o actualizada, la sentencia se aborta y la tabla no se modifica.
    • Si la sentencia inserta o modifica varias filas y el valor incorrecto ocurre en la segunda fila o posterior, depende del modo estricto que esté en uso:
      • En STRICT_ALL_TABLES: Mysql retorna un error e ignora el resto de las filas! Como las filas anteriores han sido insertadas o actualizadas, el resultado es un cambio parcial. Para evitar esto, se recomienda utilizar sentencias que afecten a una sola línea y puedan ser abortadas sin modificar la tabla.
      • En STRICT_TRANS_TABLE:Mysql genera un alerta y continúa procesando la sentencia
        • Si el valor es inválido, se convierte al valor válido más cercano según el tipo de columna y se inserta.
        • Si el valor falta, se inserta el “valor por defecto para el tipo de dato de la columna”.

También afecta el manejo de la división por cero, fechas cero y fechas con ceros:

  • Mysql < 5.7.4: trabajando en conjunción con los modos NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO
  • Mysql >= 5.7.4: tomando el comportamiento de los tres modos indicados arriba
Tagged with: , , ,
Publicado en Aplicaciones
One comment on “Modo estricto de Mysql
  1. […] Mysql puede configurarse para operar en ciertos modos. Estos modos afectan la sintaxis SQL soportada y las validaciones que se realizan y a su vez, permiten que Mysql pueda usarse en diferentes entornos. Contemplar que para explicar muchos de estos modos, se requiere tener conocimiento del modo estricto. […]

Los comentarios están cerrados.