You are here
La base de datos de información INFORMATION_SCHEMA Sin categoría 

La base de datos de información INFORMATION_SCHEMA

La base de datos de información INFORMATION_SCHEMA

 

INFORMATION_SCHEMA es la base de datos de información, que almacena información acerca de todas las otras bases de datos que mantiene el servidor mysql. Dentro del INFORMATION_SCHEMA hay varias tablas de sólo lectura. En realidad son vistas, no tablas, así que no puede ver ningún fichero asociado con ellas. Cada usuario mysql tiene derecho a acceder a estas tablas, pero sólo a los registros que se corresponden a los objetos a los que tiene permiso de acceso.

 

Matemáticas de precisión

La matemática de precisión se basa en dos cambios de implementación:

  • La introducción de nuevos modos SQL en MySQL 5.0.2 que controlan lo estricto que es el servidor para aceptar o rechazar datos inválidos.
  • La introducción en MySQL 5.0.3 de una biblioteca para aritmética de punto fijo.

Estos cambios tienen varias implicaciones para operaciones numéricas:

  • Cálculos más precisos.

Para números exactos, los cálculos no introducen error en coma flotante. En su lugar, se usa precisión exacta. Por ejemplo, un número tal como .0001 se trata como un valor exacto en lugar de valor aproximado, y sumarlo 10,000 veces produce un resultado de 1, no un valor “cercano” a 1.

  • Comportamiento bien definido para el redondeo.

Para números exactos, el resultado de ROUND() depende de sus argumentos, no de factores tales como el comportamiento de la biblioteca C subyacente.

  • Independencia de plataforma mejorada.

Las operaciones con números exactos son los mismos entre distintas plataformas tales como Windows y Unix.

  • Control sobre tratamiento de datos inválidos.

 

Desbordamiento y división por cero pueden detectarse y tratarse como errores. Por ejemplo, puede tratar un valor que es demasiado grande para una columna como un error en lugar de truncarlo para adaptarlo al rango del tipo de datos. Similarmenet, puede tratar la división por cero como un error en lugar que como una operación que produce un resultado de NULL. La elección de qué aproximación seguir se determina mediante la variable de sistema sql_mode .

Tipos de valores numéricos

 

El ámbito de matemáticas de precisón para operaciones de valores exactos incluyen tipos de datos precisos (DECIMAL y tipos interos) y literales de valores numéricos exactos. Los tipos de datos aproximados y literales numéricos se tratan como valores en coma flotante.

 

Literales numéricos de valores exactos tienen una parte entera o fraccional, o ambas. Pueden tener signo. Ejemplos: 1.23.4-5-6.78+9.10.

 

Literales de valores numéricos aproximados se representan en notación científica con una mantisa y exponente. Una o ambas partes pueden tener signo.

Ejemplos: 1.2E31.2E-3-1.2E3-1.2E-3.

 

Números que parecen similares no necesitan ser ambos valores exactos o aproximados. Por ejemplo, 2.34 es un valor exacto (punto fijo), mientras que 2.34E0 es un valor aproximado (coma flotante).

 

El tipo de datos DECIMAL es un tipo de punto fijo y los cálculos son exactos. En MySQL, el tipo DECIMAL tiene varios sinónimos: NUMERICDECFIXED. El tipo entero también es un tipo de valor exacto.

 

Los tipos de datos FLOAT y DOUBLE son tipos de coma flotante y los cálculos son aproximados. En MySQL, los tipos sinónimos de FLOAT o DOUBLE son DOUBLE

PRECISION y REAL.

Manejo de expresiones

Con matemáticas de precisión, los números con valores exactos se usan tal y como se dan cuando es posible. Por ejemplo, números en comparaciones se usan exactamente como se dan sin cambiar su valor. En modo SQL estricto, para un INSERT en una columna con un tipo exacto (DECIMAL o entero), se inserta un número con su valor exacto si está dentro del rango de la columna. Cuando se recibe, el valor debe ser el mismo que se insertó. (Sin modo estricto, se permite truncar para INSERT.)

 

El tratamiento de expresiones numéricas depende de qué clase de valores contiene la expresión:

  • Si hay presente algún valor aproximado, la expresión es aproximada y se evalúa usando aritmética de punto flotante.
  • Si no hay presente ningún valor aproximado, la expresión contiene sólo valores exactos. Si algún valor exacto contiene una parte fraccional ( un valor a continuación del punto decimal), la expresión se evalúa usando aritmética exactaDECIMAL y una precisión de 64 dígitos. (“Exacto” esta sujeto a los límites de lo que puede representarse en binario. 0/3.0 puede representarse como .333… con un número finito de dígitos, no como “exactamente un tercio”, así que (1.0/3.0)*3.0 no se evalúa como “exactamente 1.0.”)
  • En otro caso, la expresión contiene sólo valores enteros. La expresión es exacta y evaluada usando aritmética entera y tiene la misma precisión queBIGINT (64 bits).

 

Si una expresión numérica contiene cualquier cadena de caracteres, se convierten a valores de coma flotante y doble precisión y la expresión es aproximada.

Las inserciones en columnas numéricas están afectadas por el modo SQL, controlada por la varible de sistema sql_mode. (Consulte Sección 1.7.2, “Selección de modos SQL”.)

 

La siguiente discusión menciona el modo estricto (seleccionado por los valores de modo STRICT_ALL_TABLES o STRICT_TRANS_TABLES) yERROR_FOR_DIVISION_BY_ZERO.

 

Para activar todas las restricciones, puede usar el modo TRADITIONAL, que incluye tanto el modo estricto como ERROR_FOR_DIVISION_BY_ZERO:

mysql> SET sql_mode='TRADITIONAL’;

Si se inserta un número en una columna de tipo exacto (DECIMAL o entero), debe insertarse con su valor exacto si está dentro del rango de la columna.

 

Si el valor tiene demasiados dígitos en la parte fraccional, se redondea y se genera una advertencia. El redondeo se hace como se describe en “Comportamiento del redondeo”.

Si el valor tiene demasiados dígitos en la parte entera, es demasiado grande y se trata como se explica a continuación:

  • Si el modo estricto no está activado, el valor se trunca al valor legal más cercano y se genera una advertencia.
  • Si el modo estricto está activo, se genera un error de desbordamiento.

Desbordamiento inferior no se detecta, así que su tratamiento no está definido.

Por defecto, la división por cero produce un resultado de NULL y ninguna advertencia. Con el modo SQLERROR_FOR_DIVISION_BY_ZERO activado, MySQL trata la división por cero de forma distinta:

 

  • Si el modo estricto no está activo, aparece una advertencia.
  • Si el modo estricto está activo, las inserciones y actualizaciones con divisiones por cero están prohibidas y ocurre un error.

En otras palabras, inserciones y actualizaciones que impliquen expresiones que realizan divisiones por cero pueden tratarse como errores, pero esto requiere ERROR_FOR_DIVISION_BY_ZERO además del modo estricto.

 

Suponga que tenemos este comando:

INSERT INTO t SET i = 1/0;

 

Esto es lo que ocurre al combinar modo estricto y  ERROR_FOR_DIVISION_BY_ZERO :

 

sql_mode Valor Resultado
No advertencia, no error, i es NULL
strict No advertencia, no error, i es NULL
ERROR_FOR_DIVISION_BY_ZERO Advertencia, no error, i es NULL
strict,ERROR_FOR_DIVISION_BY_ZERO Error, no se inserta el registro

Para inserciones de cadenas de caracteres en columnas numéricas, las conversiones de cadenas a números se tratan como se muestra si la cadena tiene contenido no numérico:

  • Una cadena que no comienza con un número no puede usarse como número y produce un error en modo estricto, o una advertencia en otro caso. Esto incluye la cadena vacía.
  • Una cadena que comienza con un número puede convertirse, pero se trunca la parte no numérica final. Esto produce un error en modo estricto, o una advertencia en otro caso.

Si quieres seguir aprendiendo con nosotros, puedes ingresar a nuestros

Cursos y Diplomados de Tecnología Web visita www.uneweb.edu.ve  para más información

Related posts