Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

modos SQL y tablas

Estas en el tema de modos SQL y tablas en el foro de Mysql en Foros del Web. hola a todos, aunque creo k entiendo como funcionan no entiendo muy bien el significado de los modos strict_trans_tables y strict_all_tables ," que activan el ...
  #1 (permalink)  
Antiguo 22/06/2016, 04:40
 
Fecha de Ingreso: diciembre-2007
Mensajes: 299
Antigüedad: 16 años, 4 meses
Puntos: 2
Pregunta modos SQL y tablas

hola a todos,
aunque creo k entiendo como funcionan no entiendo muy bien el significado de los modos strict_trans_tables y strict_all_tables," que activan el modo estricto en tablas transacionales y todas las tablas, respectivamente" de MySQL.

Si el modo strict_trans_tables activan el modo estricto en tablas transacionales(como InnoDB), las demas tablas son mas "permisivas" ante errores, ¿no?

Código MySQL:
Ver original
  1. set sql_mode=strict_trans_tables;
  2. insert into c52 values(-7); -- ERR

Si la tabla no es InnoDB(transaccional), ¿porque me da errores(en lugar de convertir el dato) al insertar datos no validos? yo entiendo que solo las tablas innoDB "son estrictas" ¿Alguien me puede explicar su significado?

Gracias, saludos:D
__________________
1os pasaos con xAMP en Windows
programando en PERL
  #2 (permalink)  
Antiguo 22/06/2016, 04:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: modos SQL y tablas

La primera pregunta sería: ¿Qué es exactamente lo que quieres hacer y por qué?

Es decir, ¿cual se supone que es tu intención al modificar los valores de parametrizacion del servidor? ¿Quieres conseguir algún tipo de mejora, ajustar el rendimiento, o simplemente estás haciendo experimentos?

En cualquiera de esas situaciones, lo primero que tienes que hacer es estudiar detalladamente el manual, y ademas otra bibliografía referida a administración de servidores. No sirve hacer experiencias al tun-tun sin saber lo que haces.

Yendo directamente al manual:
Cita:
If a value could not be inserted as given into a transactional table, abort the statement. For a nontransactional table, abort the statement if the value occurs in a single-row statement or the first row of a multiple-row statement. More details are given later in this section.

As of MySQL 5.7.5, the default SQL mode includes STRICT_TRANS_TABLES.
Básicamente, si un valor dado a una columna no puede ser insertado, se cancela la ejecución en tablas transaccionales.
En las no transaccionales la cancelación se produce en una sentencia simple de inserción, o bien si está en el primer registro de una inserción masiva (multirregistro).

Nota: A partir de MySQL 5.7.5 es la configuracion por default del servidor. En versiones como esa o superiores, indicarlo es redundante.

ALgo mas adelante el manual dice:

Cita:
For STRICT_TRANS_TABLES, MySQL converts an invalid value to the closest valid value for the column and inserts the adjusted value. If a value is missing, MySQL inserts the implicit default value for the column data type. In either case, MySQL generates a warning rather than an error and continues processing the statement. Implicit defaults are described in Section 12.7, “Data Type Default Values”.
Con STRICT_TRANS_TABLES, MySQL convierte un valor invalido en el mas cercado válido para la columna, e inserta el valor ajustado. Si el valor no está, inserta el valor por defecto implícito para el tipo de dato de la columna. En otro caso, MySQL genera una advertencia (warning) o un error y continúa procesando la sentencia. Los valores por default se describen en la seccion 12.7, “Data Type Default Values” del manual.

http://dev.mysql.com/doc/refman/5.7/...-defaults.html

Lee los manuales.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 22/06/2016, 05:19
 
Fecha de Ingreso: diciembre-2007
Mensajes: 299
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: modos SQL y tablas

Hola gnzsoloyo,
solo estoy preparando un examen sobre MySQL y necesito entender los modos SQL, nada en concreto solo entender su funcionamiento.

respecto al manual, ya lo lei, entiendo que en tablas no transaccionales da error si el dato invalido esta en la 1ª fila a insertar(unica si el el INSERT es de una sola fila).

Me referia mas bien al significado de este modo pues parece decir que las tablas no transaccionales estan "libres de error" bajo este modo(strict_trans_tables) pero ya veo k no es asi ¿este modo tiene alguna explicacion o simplemente "es asi"?

¿se entiende mi duda?
__________________
1os pasaos con xAMP en Windows
programando en PERL
  #4 (permalink)  
Antiguo 22/06/2016, 05:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: modos SQL y tablas

La definición de "modos" está al principio del capitulo dedicado al tema en el manual:

Cita:
6.1.7 Server SQL Modes

The MySQL server can operate in different SQL modes, and can apply these modes differently for different clients, depending on the value of the sql_mode system variable. DBAs can set the global SQL mode to match site server operating requirements, and each application can set its session SQL mode to its own requirements.

Modes affect the SQL syntax MySQL supports and the data validation checks it performs. This makes it easier to use MySQL in different environments and to use MySQL together with other database servers.
Cita:
El MySQL Server puede operar en diferentes modos de SQL, y estos modos pueden aplicarse en forma diferente para diferentes clientes, dependiendo del valor de la variable SQL_MODE. Los DBA pueden ajustar el modo global de SQL para a los requerimientos del servidor operativo en el server del sitio, y cada aplicación puede ajustar su modo SQL de sesión para sus propios requerimientos.

Los modos SQL afectan la sintaxis e SQL soportado por MySQL y las validaciones de datos que realiza. Esto hace a MySQL facil de usar en diferentes ambientes y utilziar MySQL junto a otros servidores de BBDD..

Para hacértelo mas o menos simple: Si en algún caso tienes dos DBMS ,que trabajan en forma concurrente, y el segundo tiene reglas específicas de sintaxis, puedes sin mayores inconvenientes ajustar el comportamiento de MySQL a las reglas del otro servidor, de modo que haya consistencia en sus comportamientos, y no tengas que apelar a reglas de programación específica para trabajar con ambos servidores a la vez.
¿Se va entendiendo?

El modo sobre el que preguntas apunta a hacer que MySQL se comporte de un modo determinado ante valores que no pasan las restricciones de tipos de datos.
¿Cuando lo usas?
Dependerá de cuando lo necesites usar...

En el diseño y administración de BBDD, no hay reglas fijas. Depende de qué es lo que se necesite hacer, en qué momento, para qué requerimientos y sobre qué base de datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: sql, tabla, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:18.