Los principales modos de funcionamiento de Mysql

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 principales modos son:

ANSI (desde Mysql 4.1.1)

Cambia el comportamiento para que se asemeje más al estándar SQL. Es uno de los modos de combinación especial. Establece los siguientes modos: REAL_AS_FLOAT, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, ANSI.

TRADITIONAL

Mysql se comporta como un sistema de base de datos SQL tradicional. Genera un error en lugar de un aviso (warning) cuando se intenta insertar un valor incorrecto en una columna. Es uno de los modos de combinación especial.

Dado que aquí, el INSERT o UPDATE abortan cuando se detecta un error, no se recomienda para un motor de almacenamiento no transaccional, ya que los cambios realizados previamente al error no se vuelven atrás, resultando en una actualización parcial!

Equivale a:

  • Mysql < 5.7.4: STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, TRADITIONAL, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION
  • Mysql >= 5.7.4: STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION
    • los efectos de los modos NO_ZERO_IN_DATE, NO_ZERO_DATE y ERROR_FOR_DIVISION_BY_ZERO están incluidos dentro del modo estricto para esta versión

STRICT_ALL_TABLES (desde Mysql 5.02)

Activa el modo estricto para todos los motores de almacenamiento. Los datos inválidos son rechazados.

STRICT_TRANS_TABLE (Desde Mysql 5.02)

Activa el modo estricto para los motores transaccionales. Si un valor no puede ser insertado tal como viene en una tabla transaccional, se aborta la sentencia. Para una tabla no transaccional, se aborta la sentencia si el valor inválido ocurre en una sentencia que afecta a una sola fila o en la primer fila de una sentencia de múltiples filas.

NO_AUTO_CREATE_USER (desde Mysql 5.02)

Previene que la sentencia GRANT automáticamente cree nuevos usuarios, a menos que se especifique un password no vacío.

NO_ENGINE_SUBSTITUTION (desde Mysql 5.08)

Al indicar la creación o modificación de una tabla con un motor no disponible:

  • Si está desactivado: se utiliza el motor por defecto y se genera un alerta (warning) solamente cuando el motor indicado es conocido pero está desactivado.
  • Si está activado: genera un error

NO_ZERO_DATE (hasta Mysql 5.7.4)

Define el comportamiento al intentar indicar una fecha con todos ceros (0000-000-00):

  • Si está desactivado: está permitida y el INSERT no genera un alerta
  • Si está activado: está permitida y el INSERT genera un alerta (warning)
    • Junto con el modo estricto: no está permitida y el INSERT produce un error
      • Pero si se usa IGNORE: está permitida y el INSERT genera un alerta (warning)

NO_ZERO_IN_DATE (hasta Mysql 5.7.4)

Define el comportamiento al intentar indicar una fecha en la cual el año no es cero pero el mes o el día sí:

  • Si está desactivado: está permitida y el INSERT no genera un alerta
  • Si está activado: la fecha se inserta como ‘0000-00-00’ y el INSERT genera un alerta (warning)
    • Junto con el modo estricto: no está permitida y el INSERT produce un error
      • Pero si se usa IGNORE:  la fecha se inserta como ‘0000-00-00’ y el INSERT genera un alerta (warning)

ERROR_FOR_DIVISION_BY_ZERO (hasta Mysql 5.7.4)

Define el comportamiento al intentar indicar una división por cero, incluyendo MOD(N,0):

  • Si está desactivado: se inserta NULL y el INSERT no genera un alerta
  • Si está activado: se inserta NULL y el INSERT genera un alerta (warning)
    • Junto con el modo estricto: el INSERT produce un error
      • Pero si se usa IGNORE:  se inserta NULL y el INSERT genera un alerta (warning)

En un SELECT, una división por cero retorna NULL. Adicionalmente, si ERROR_FOR_DIVISION_BY_ZERO está activado, se genera un alerta.

Tagged with: ,
Publicado en Aplicaciones
One comment on “Los principales modos de funcionamiento de Mysql
  1. […] ver el modo en el que Myqsl está trabajando, debemos consultar la variable de sistema sql_mode. Para ello, abrimos una […]

Los comentarios están cerrados.