SETvariable_assignment
[,variable_assignment
] ...variable_assignment
:user_var_name
=expr
| [GLOBAL | SESSION]system_var_name
=expr
| @@[global. | session.]system_var_name
=expr
SET
inicializa distintos tipos de variables
que afectan la operación del servidor o de su cliente. Puede
usarse para asignar valores a las variables de usuario o de
sistema.
El comando SET PASSWORD
para asignar
contraseñas de cuenta se describen en
Sección 13.5.1.5, “Sintaxis de SET PASSWORD
”.
La mayoría del sistema puede cambiarse en tiempo de ejecución. Las variables de sistema que pueden describirse dinámicamente se describen en Sección 5.3.3.1, “Variables de sistema dinámicas”.
Nota: Las versiones antiguas de MySQL
empleaban SET OPTION
para este comando, pero
su uso está obsoleto en favor de SET
.
El siguiente ejemplo muestra las distintas sintaxis que puede usar para cambiar las variables.
Una variable de usuario se escribe como
@
y puede
cambiarse como sigue:
var_name
SET @var_name
=expr
;
Más información sobre variables de usuario se da en Sección 9.3, “Variables de usuario”.
Se puede referir a las variables de sistema en comandos
SET
como var_name
.
El nombre puede ir precedido opcionalmente por
GLOBAL
o @@global.
para
indicar explícitamente que la variable es global, o por
SESSION
, @@session.
, o
@@
para indicar que es una variable de
sesión. LOCAL
y @@local.
son sinónimos para SESSION
y
@@session.
. Si no hay modificador presente,
SET
asigna un valor a la variable de sesión.
La sintaxis
@@
para
variables de sistema se soporta para hacer la sintaxis de MySQL
compatible con otros sistemas de base de datos.
var_name
Si cambia varias variables de sistema en el mismo comando, la
última opción GLOBAL
o
SESSION
usada se usa para variables que no
tienen modo especificado.
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;
Si cambia una variable de sistema usando
SESSION
(por defecto), el valor queda en
efecto hasta que la sesión actual finaliza o hasta que cambia
la variable con un valor distinto. Si cambia la variable de
sistema usando GLOBAL
, que requiere el
permiso SUPER
, el valor se recuerda y se usa
para nuevas conexiones hasta que el servidor se reinicia. Si
quiere hacer un cambio de variable permanente, debe ponerlo en
un fichero de opciones. Consulte Sección 4.3.2, “Usar ficheros de opciones”.
Para evitar uso incorrecto, MySQL produce un error si usa
SET GLOBAL
con una variable que sólo puede
ser usada con SET SESSION
o si no especifica
GLOBAL
(o @@
) cuando
cambie una variable global.
Si quiere cambiar una variable SESSION
al
valor GLOBAL
o un valor
GLOBAL
al valor de compilación de MySQL por
defecto, puede hacerlo con DEFAULT
. Por
ejemplo, los siguientes dos comandos son idénticos en cambiar
los valores de sesión o max_join_size
al
valor global:
SET max_join_size=DEFAULT; SET @@session.max_join_size=@@global.max_join_size;
Puede obtener una lista de la mayoría de variables de sistema
con SHOW VARIABLES
. (Consulte
Sección 13.5.4.21, “Sintaxis de SHOW VARIABLES
”.) Para obtener un nombre de
variable específico, use una cláusula LIKE
commo se muestra:
SHOW VARIABLES LIKE 'max_join_size'; SHOW GLOBAL VARIABLES LIKE 'max_join_size';
Para obtener una lista de variables cuyos nombres coinciden con
un patrón, use el comodín '%
':
SHOW VARIABLES LIKE 'have%'; SHOW GLOBAL VARIABLES LIKE 'have%';
El comodín puede usarse en cualquier posición dentro del patrón para coincidir.
Puede obtener el valor de un valor específico usando la
sintaxis @@[global.|local.]var_name
con
SELECT
:
SELECT @@max_join_size, @@global.max_join_size;
Cuando recibe una variable con SELECT
@@var_name
(esto es,no especifica
global.
, session.
, o
local.
), MySQL retorna el valor
SESSION
si existe y el valor
GLOBAL
en otro caso.
La siguiente lista describe variables que tienen sintaxis no
estándar o que no se describe en la lista de variables de
sistema que se encuentra en
Sección 5.3.3, “Variables de sistema del servidor”. Aunque estas
variables no se muestran con SHOW VARIABLES
,
puede obtener sus valores con SELECT
(con la
excepción de CHARACTER SET
y SET
NAMES
). Por ejemplo:
mysql> SELECT @@AUTOCOMMIT; +--------------+ | @@autocommit | +--------------+ | 1 | +--------------+
AUTOCOMMIT = {0 | 1}
Pone el modo autocommit . Con valor 1
,
todos los cambios de una tabla toman efecto inmediatamente.
Si se pone a 0
, debe usar
COMMIT
para aceptar una transacción o
ROLLBACK
para cancelarla. Si cambia el
modo AUTOCOMMIT
de 0
a
1
, MySQL realiza un
COMMIT
automático de cualquier
transacción abierta . Otra forma de comenzar una
transacción es usar un comando START
TRANSACTION
o BEGIN
. Consulte
Sección 13.4.1, “Sintaxis de START TRANSACTION
,
COMMIT
y ROLLBACK
”.
Si se pone a 1
, todas las tablas
temporales se almacenan en disco en lugar que en memoria.
Esto es un poco lento, pero el error The table
no
ocurre para operaciones tbl_name
is fullSELECT
que
requieran una tabla temporal grande. El valor por defecto
para una nueva conexión es 0
(use tablas
temporales en memoria). Normalmente, nunca debería
necesitar usar esta variable, ya que MySQL 5.0 convierte
automáticamente tablas en memoria a tablas en disco como se
requiere. (Nota: Esta variable se
llamaba préviamente SQL_BIG_TABLES
.)
CHARACTER SET
{
charset_name
|
DEFAULT}
Esto mapea todas las cadenas desde y hacia el cliente con el
mapeo dado. Puede añadir nuevos mapeos editando
sql/convert.cc
en la distribución
fuente MySQL. En MySQL 5.0, SET CHARACTER
SET
cambia tres variables de sistema
character_set_client
y
character_set_results
se actualizan con
el conjunto de caracteres dado, y
character_set_connection
al valor de
character_set_database
.
El mapeo por defecto puede restaurarse usando el valor
DEFAULT
.
Tenga en cuenta que la sintaxis para SET CHARACTER
SET
difiere de la de la mayoría de otras
opciones.
FOREIGN_KEY_CHECKS = {0 | 1}
Con valor de 1
(por defecto), las claves
foráneas para tablas InnoDB
se chequean.
Si se pone a 0
, se ignoran. Deshabilitar
el chequeo de clave foránea puede ser útil para recargar
tablas InnoDB
en un orden distinto que el
requerido por sus relaciones padre/hijo, Consulte
Sección 15.6.4, “Restricciones (constraints) FOREIGN KEY
”.
IDENTITY =
value
La variable es un sinónimo para la variable
LAST_INSERT_ID
. Existe por
compatibilidad con otras bases de datos. Puede leer su valor
con SELECT @@IDENTITY
, y cambiarlo
mediante SET IDENTITY
.
INSERT_ID =
value
Cambia el valor a ser usado por los comandos
INSERT
o ALTER TABLE
al insertar un valor AUTO_INCREMENT
.
Esto se usa principalmente con el lob binario.
LAST_INSERT_ID =
value
Cambia el valor a ser retornado de
LAST_INSERT_ID()
. Esto se almacena en el
log binario cuando usa LAST_INSERT_ID()
en un comando que actualice una tabla. Cambiar esta variable
no actualiza el valor retornado por la función de la
mysql_insert_id()
API de C.
NAMES {'
charset_name
' |
DEFAULT}
SET NAMES
cambia tres variables de
sesión de sistema character_set_client
,
character_set_connection
, y
character_set_results
al conjunto de
caracteres dado. Cambiar
character_set_connection
a
charset_name
también cambia
collation_connection
a la colación por
defecto para charset_name
.
El mapeo por defecto puede restaurarse usando un valor de
DEFAULT
.
Tenga en cuenta que la sintaxis para SET
NAMES
difiere de la usada para la mayoría de
otras opciones.
SQL_NOTES = {0 | 1}
Con el valor 1 (por defecto), advertencias del nivel
Note
se registran. Con valor 0, las
advertencias Note
se suprimen.
mysqldump incluye la salida para cambiar
esta variable a 0 así que recargar el fichero volcado no
produce advertencias para eventos que no afectan a la
integridad de la operación de recarga.
SQL_NOTES
se añadió en MySQL 5.0.3.
SQL_AUTO_IS_NULL = {0 | 1}
Con valor 1
(por defecto), puede
encontrar el último registro insertado para una tabla que
contiene una columna AUTO_INCREMENT
usando el siguiente constructor:
WHERE auto_increment_column
IS NULL
Este comportamiento lo usan algunos programas ODBC, como Access.
SQL_BIG_SELECTS = {0 | 1}
Con valor 0
, MySQL aborta los comandos
SELECT
que probablemente tardarán mucho
tiempo (esto es, comandos para los que el optimizador estima
que el número de registros examinados excede el valor de
max_join_size
). Esto es útil cuando un
comando WHERE
no aconsejable se ejecuta.
El valor por defecto para una nueva conexión es
1
, que permite todos los comandos
SELECT
.
Si cambia la variable de sistema
max_join_size
a un valor distinto a
DEFAULT
,
SQL_BIG_SELECTS
se pone a
0
.
SQL_BUFFER_RESULT = {0 | 1}
SQL_BUFFER_RESULT
fuerza los resultados
de los comandos SELECT
a poner en tablas
temporales. Esto ayuda a MySQL a liberar los bloqueos de
tabla rápidamente y pueden ser beneficioso en caso que
tarde un largo tiempo para enviar resultados al cliente.
SQL_LOG_BIN = {0 | 1}
Con valor 0
, no se realiza logueo en el
log binario para el cliente. El cliente debe tener el
permiso SUPER
para cambiar esta opción.
SQL_LOG_OFF = {0 | 1}
Con valor 1
, no se realiza logueo en el
log de consultas generales para el cliente. El cliente debe
tener el permiso SUPER
para cambiar esta
opción.
SQL_LOG_UPDATE = {0 | 1}
Esta variable está obsoleta, y es mapea a
SQL_LOG_BIN
.
SQL_QUOTE_SHOW_CREATE = {0 | 1}
Con valor 1
, SHOW CREATE
TABLE
entrecomilla los nombres de tabla y
columnas. Si se pone a 0
, se desactiva el
entrecomillado. Esta opción está activada por defecto,
así que la replicación funciona para tablas con nombres de
tabla y columna que no lo requieren. Consulte
Sección 13.5.4.5, “Sintaxis de SHOW CREATE TABLE
”.
SQL_SAFE_UPDATES = {0 | 1}
Con valor 1
, MySQL aborta comandos
UPDATE
o DELETE
que no
usan una clave en la cláusula WHERE
o
LIMIT
. Esto hace posible cazar los
comandos UPDATE
o
DELETE
donde las claves no se usan
apropiadamente y que probablemente cambiarían o borrarían
un gran número de registros.
SQL_SELECT_LIMIT =
{
value
| DEFAULT}
El máximo número de registros a retornar desde comandos
SELECT
. El valor por defecto para una
nueva conexión es “unlimited.” Si cambia este
límite, el valor por defecto puede restaurarse usando un
valor SQL_SELECT_LIMIT
de
DEFAULT
.
Si un SELECT
tiene una cláusula
LIMIT
el LIMIT
tiene
preferencia sobre el valor de
SQL_SELECT_LIMIT
.
SQL_SELECT_LIMIT
no se aplica a comandos
SELECT
ejecutados en rutinas almacenadas.
Tampoco se aplica a comandos SELECT
que
no producen un conjunto de resultados a ser retornado al
cliente. Esto incluye comandos SELECT
en
subconsultas, CREATE TABLE ... SELECT
, y
INSERT INTO ... SELECT
.
SQL_WARNINGS = {0 | 1}
Esta variable controla si comandos INSERT
de un registro producen una cadena de información si hay
una advertencia. Por defecto es 0. Cambie el valor a 1 para
producir una cadena de información.
TIMESTAMP =
{
timestamp_value
|
DEFAULT}
Cambia la hora del cliente. Se usar para obtener la fecha y
hora original si usa el log binario para restaurar
registros. timestamp_value
debe ser un
Unix epoch timestamp, no un timestamp de MySQL.
UNIQUE_CHECKS = {0 | 1}
Con valor 1
(por defecto), se realizan
chequeos en tablas InnoDB
para índices
secundarios. Con valor 0
, no se hacen
chequeos de valores únicos para entradas de índices
insertados en el búffer de inserción de InnoDB. Si sabe
con certeza que sus datos no contienen violaciones de
valores únicos, puede ponerlo a 0 para acelerar
importaciones de tablas grandes a InnoDB.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.