SET
SET [GLOBAL | SESSION] sql_variable=expression, [[GLOBAL | SESSION] sql_variable=expression] ...
SET activa varias opciones que afectan al funcionamiento del servidor y el cliente.
Los siguientes ejemplos muestran las diferentes sintaxis que se pueden usar para modificar variables:
En versiones antiguas de MySQL está permitido usar la sintaxis SET OPTION, pero esto está desaconsejado ahora.
En MySQL 4.0.3 se han añadido las opciones GLOBAL y SESSION y acceso a las variables de arranque más importantes.
LOCAL se puede usar como sinónimo de SESSION.
Si se modifican varias variables en la misma línea de comando, se usa el último modo GLOBAL | SESSION.
SET sort_buffer_size=10000; SET @@local.sort_buffer_size=10000; SET GLOBAL sort_buffer_size=1000000, SESSION sort_buffer_size=1000000; SET @@sort_buffer_size=1000000; SET @@global.sort_buffer_size=1000000, @@local.sort_buffer_size=1000000;
La sintaxis @@variable_name se soporta para hacer la sintaxis de MySQL compatible con otras bases de datos.
Las variables de sistema que se pueden modificar se describen en la sección de variables de sistam de este manual.
Si se está usando SESSION (por defecto), la opción modificada permanece en efecto hasta que la sesión actual termine, o hasta que se cambie la opción a un valor diferente. Si se usa GLOBAL, que requiere el privilegio SUPER, la opción se recuerda y se usa para nuevas conexiones hasta que el servidor se reinicie. Si se quiere que una opción se modifique permanentemente, se debe activar en un fichero de opciones.
Para impedir el uso incorrecto, MySQL producirá un error si se usa SET GLOBAL con una variable que sólo se puede usar con SET SESSION o si no se usa SET GLOBAL con una variable global.
Si se quiere cambiar una variable de SESSION a un valor GLOBAL o un valor GLOBAL a su valor por defecto de MySQL, se puede asignar DEFAULT.
SET max_join_size=DEFAULT;
Esto es idéntico a:
SET @@session.max_join_size=@@global.max_join_size;
Si se quiere restringir el valor máximo al que una variable del servidor puede ser asignada, se puede especificar ese máximo usando la opción de línea de comando --maximum-variable-name.
Se puede obtener una lista de la mayoría de las variables con SHOW VARIABLES. Se puede obtener el valor de una variable específica con la sintaxis @@[global.|local.]variable_name:
SHOW VARIABLES like "max_join_size"; SHOW GLOBAL VARIABLES like "max_join_size"; SELECT @@max_join_size, @@global.max_join_size;
A continuación se expone una descripción de las variables que usan una sintaxis no estándar de SET y algunas de las otras variables. El resto de las definiciones de variables pueden encontrarse en la sección de variables del sistema, entre las opciones de arranque o en la descripción de SHOW VARIABLES.
AUTOCOMMIT= 0 | 1
Si se asigna 1, todos los cambios de una tabla se hacen inmediatamente. Para comenzar una transacción multicomando, se debe usar la sentencia BEGIN. Ver también las sintaxis de START TRANSACTION, COMMIT y ROLLBACK. Si se asigna 0 se debe usar COMMIT para aceptar la transacción o ROLLBACK para cancelarla. Cuando se cambia el modo AUTOCOMMIT de 0 a 1, MySQL realiza un COMMIT automático de cualquier transacción abierta.
BIG_TABLES = 0 | 1
Se se asigna 1, todas las tablas temporales se almacenan en disco en lugar de en memoria. Esto puede ser un poco más lento, pero no se obtendrá el error "The table tbl_name is full" para operaciones SELECT grandes que requieren una tabla temporal grande. El valor por defecto para nuevas conexiones es 0 (es decir, usar tablas temporales en memoria). Esta variable fue llamada previamente SQL_BIG_TABLES. En MySQL 4.0, normalmente no será necesario modificar esta variable, ya que MySQL convierte tablas en memoria a tablas en disco de forma automática, cuando es necesario.
CHARACTER SET character_set_name | DEFAULT
Esto mapea todas las cadenas desde y hacia el cliente con el mapeado dado. Actualmente la única opción para character_set_name es "cp1251_koi8", pero se puden añadir fácilmente nuevos mapeados mediante la edición del fichero 'sql/convert.cc' en la distribución fuente de MySQL. El mapeado por defecto puede ser restaurado usando el valor DEFAULT para character_set_name. Puede verse que la sintaxis para cambiar la opción CHARACTER SET difiere de la sintaxis para modificar otras opciones.
INSERT_ID = #
Cambia el valor a uar en el siguiente comando INSERT o ALTER TABLE cuando se inserte un valor AUTO_INCREMENT. Esto se usa principalmente con el diario binario.
LAST_INSERT_ID = #
Cambia el valor que retornará desde LAST_INSERT_ID(). Este se almacena en el diario binario cuando se usa LAST_INSERT_ID() en un comando que actualice una tabla.
LOW_PRIORITY_UPDATES = 0 | 1
Si se asigna 1, todas las sentencias INSERT, UPDATE, DELETE y LOCK TABLE WRITE esperan hasta que no haya sentencias SELECT o LOCK TABLE READ pendientes en al tabla afectada. Esta variable previamente se llamaba SQL_LOW_PRIORITY_UPDATES.
MAX_JOIN_SIZE = value | DEFAULT
No admite sentencias SELECT que probablemente necesiten examinar más más de 'value' combinaciones de valor de fila o es probable que haga más 'value' accesos a disco. Mediante este valor se pueden detener sentencias SELECT donde las claves no se han usado apropiadamente y que es probable que requieran mucho tiempo. Asignando un valor diferente de DEFAULT asigna 0 a SQL_BIG_SELECTS. Si se activa el valor de SQL_BIG_SELECTS otra vez, la variable SQL_MAX_JOIN_SIZE será ignorada. Se puede asignar un valor por defecto para esta variable arrancando mysqld con la opción --max_join_size=value. Esta variable se llamó previamente SQL_MAX_JOIN_SIZE. Si un resultado de una consulta ya está en el caché de consultas, no se realiza ninguna comprobación de tamaño, porque el resultado ya ha sido calculado y y no se cargará al servidor para enviarlo al cliente.
PASSWORD = PASSWORD('some password')
Asigna la contraseña para el usuario actual. Caulquier usuario no anónimo puede modificar su propia contraseña.
PASSWORD FOR user = PASSWORD('some password')
Asigna la constraseña para un usuario específico en el ordenador servidor actual. Sólo un usuario con acceso a la base de datos mysql puede hace esto. El usuario puede darse en el formato user@hostname, donde el 'user' y el 'hostname' son exactamente como aparecen listados en las columnas 'User' y 'Host' de la tabla 'mysql.user'. Por ejemplo, si se tiene una entrada con valores para los campos 'User' y 'Host' de 'bob' and '%.loc.gov', se debe escribir:
mysql> SET PASSWORD FOR 'bob'@'%.loc.gov' = PASSWORD('newpass');Que es equivalente a:
mysql> UPDATE mysql.user SET Password=PASSWORD('newpass') -> WHERE User='bob' AND Host='%.loc.gov'; mysql> FLUSH PRIVILEGES;
QUERY_CACHE_TYPE = OFF | ON | DEMAND
QUERY_CACHE_TYPE = 0 | 1 | 2
Modifica la configuración del caché de consultas para este hilo.
Opción Descripción 0 o OFF No hay caché para los resultados recuperados. 1 o ON Se almacenan todos los resultados excepto consultas SELECT SQL_NO_CACHE .... 2 o DEMAND Se almacenan sólo consultas SELECT SQL_CACHE ....
SQL_AUTO_IS_NULL = 0 | 1
Si se asigna 1 (por defecto), se puede encontrar la última fila insertada en una tabla que contenga una columna AUTO_INCREMENT usando la siguiente construcción: WHERE auto_increment_column IS NULL. Esto se usa por algunos programas ODBC como Access.
SQL_BIG_SELECTS = 0 | 1
Si se asigna 0, MySQL aborta las sentencias SELECT que probablemente requieran mucho tiempo (es decir, sentencias para las que el optimizador estima que el número de filas a examinar excederá el valor de MAX_JOIN_SIZE). Esto es frecuente cuando se usa una sentencia WHERE poco aconsejable. El valor por defecto para una conexión nueva es 1, esto permite todas las sentencias SELECT. Si se asigna a MAX_JOIN_SIZE un valor que no sea DEFAULT, SQL_BIG_SELECTS tomará el valor 0.
SQL_BUFFER_RESULT = 0 | 1
SQL_BUFFER_RESULT fuerza que los resultados de las sentencias SELECT se almacenen en tablas temporales. Esto ayuda a MySQL a liberar bloqueos de tablas más pronto y ayuda en casos donde toma mucho tiempo enviar el conjunto de resultados al cliente.
SQL_LOG_BIN = 0 | 1
Si se asigna 0, no se realiza diario para el cliente en el diario binario, si el cliente tiene el privilegio SUPER.
SQL_LOG_OFF = 0 | 1
Si se asigna 1, no se actualiza el diario estándar para este cliente, si el cliente tiene el privilegio SUPER.
SQL_LOG_UPDATE = 0 | 1
Si se asigna 0, no se actualiza el diario de actualización para el cliente, si el cliente tiene el privilegio SUPER. Esta variable está desaconsejada desde la versión 5.0.
SQL_QUOTE_SHOW_CREATE = 0 | 1
Si se aigna 1, SHOW CREATE TABLE entrecomilla los nombre de la tabla y de las columnas. Por defecto vale 1, de modo que el replicado de tablas funciona con cualquier nombre de campo.
SQL_SAFE_UPDATES = 0 | 1
Si se asigna 1, MySQL aborta sentencias UPDATE o DELETE que no usen una clave o LIMIT en la cláusula WHERE. Esto hace posible detener actualizaciones equivocadas cuando se crean sentencias SQL manualmente.
SQL_SELECT_LIMIT = value | DEFAULT
El máximo número de registros retornados por sentencias SELECT. Si un SELECT tiene una cláusula LIMIT, este valor tiene preferencia sobre el valor de SQL_SELECT_LIMIT. El valor por defecto para una nueva conexión es "unlimited". Si se ha modificado el límite, es posible restaurar el valor por defecto especificando el valor DEFAULT en SQL_SELECT_LIMIT.
TIMESTAMP = timestamp_value | DEFAULT
Cambia la hora para este cliente. Esto se usa para recuperar la hora original si se usar el diario binario para restaurar filas. timestamp_value debe tener el formato Unix 'epoch timestamp', no el de MySQL.