MySQL :: MySQL 8.0 Reference Manual :: 13.2.10.1 SELECT … INTO Sentencia

13.2.10.1 SELECT .. . Declaración INTO

La SELECT ... INTO forma de SELECT habilita el resultado de una consulta para ser almacenado en variables o escrito en un archivo:

  • SELECT ... INTO var_list selecciona valores de columna y los almacena en variables.

  • SELECT ... INTO OUTFILE escribe las filas seleccionadas en un archivo. Se pueden especificar terminadores de columna y línea para producir un formato de salida específico.

  • SELECT ... INTO DUMPFILE escribe una sola fila en un archivo sin ningún formato.

Una instrucción SELECT dada puede contener como máximo una cláusula INTO, aunque como se muestra en la SELECT descripción de la sintaxis (consulte la Sección 13.2.10,» Instrucción SELECT «), la INTO puede aparecer en diferentes posiciones:

  • Antes de FROM. Ejemplo:

  • Antes de una cláusula de bloqueo final. Ejemplo:

  • Al final de la SELECT. Ejemplo:

El INTO posición al final de la declaración es compatible a partir de MySQL 8.0.20, y es la posición preferida. La posición antes de una cláusula de bloqueo está en desuso a partir de MySQL 8.0.20; espere que se elimine el soporte en af uture versión de MySQL. En otras palabras, INTO después de FROM pero no al final de SELECT produce un advertencia.

Una cláusula INTO no debe usarse en un SELECT anidado porque tal SELECT debe devolver su resultado al contexto externo. También existen restricciones sobre el uso de INTO dentro de UNION declaraciones; consulte la Sección 13.2.10.3, «Cláusula UNION».

Para la variante INTO var_list :

  • var_list nombra una lista de una o más variables, cada una de las cuales puede ser una variable definida por el usuario, un procedimiento almacenado o un parámetro de función , o una variable local de programa almacenada. (Dentro de una instrucción SELECT ... INTO var_list preparada, solo se permiten variables definidas por el usuario; consulte la Sección 13.6.4.2, «Alcance y resolución de variables locales» .)

  • Los valores seleccionados se asignan a las variables. El número de variables debe coincidir con el número de columnas. La consulta debe devolver una sola fila. Si la consulta no devuelve filas, se produce una advertencia con el código de error 1329 (No data) y los valores de las variables permanecen sin cambios. Si la consulta devuelve varias filas, se produce el error 1172 (Result consisted of more than one row). Si es posible que la declaración recupere varias filas, puede usar LIMIT 1 para limitar el conjunto de resultados a una sola fila.

INTO var_list también se puede utilizado con una TABLE declaración, sujeta a estas restricciones:

  • El número de las variables deben coincidir con el número de columnas de la tabla.

  • Si la tabla contiene más de una fila, debe usar LIMIT 1 para limitar el conjunto de resultados a una sola fila. LIMIT 1 debe preceder a la palabra clave INTO.

Un ejemplo de tal declaración se muestra aquí:

También puede seleccionar valores de una VALUES declaración que genera una una sola fila en un conjunto de variables de usuario. En este caso, debe emplear un alias de tabla y debe asignar cada valor de la lista de valores a una variable. Cada una de las dos declaraciones que se muestran aquí es equivalente a SET @x=2, @y=4, @z=8:

Los nombres de las variables de usuario no distinguen entre mayúsculas y minúsculas . Consulte la Sección 9.4, «Variables definidas por el usuario».

La forma SELECT ... INTO OUTFILE "file_name " de SELECT escribe las filas seleccionadas en un archivo. El archivo se crea en el host del servidor, por lo que debe tener el privilegio FILE para usar esta sintaxis. file_name no puede ser un archivo existente, lo que, entre otras cosas, evita que se modifiquen archivos como /etc/passwd y tablas de bases de datos. La variable de sistema character_set_filesystem controla la interpretación del nombre del archivo.

La instrucción SELECT ... INTO OUTFILE está destinada a permitir el volcado de una tabla en un archivo de texto en el servidor.Para crear el archivo resultante en algún otro host, SELECT ... INTO OUTFILE normalmente no es adecuado porque no hay forma de escribir una ruta al archivo relativa al sistema de archivos del host del servidor, a menos que la ubicación del Se puede acceder al archivo en el host remoto utilizando una ruta mapeada en la red en el sistema de archivos del host del servidor.

Alternativamente, si el software cliente MySQL está instalado en el host remoto, puede utilizar un comando de cliente como mysql -e "SELECT ..." > file_name para generar el archivo en ese host.

SELECT ... INTO OUTFILE es el complemento de LOAD DATA. Los valores de columna se escriben convertidos al juego de caracteres especificado en la cláusula CHARACTER SET. Si no existe tal cláusula, los valores se descargan utilizando el juego de caracteres binary. En efecto, no hay conversión de juego de caracteres. Si un conjunto de resultados contiene columnas en varios conjuntos de caracteres, también lo es el archivo de datos de salida y es posible que no sea posible volver a cargar el archivo correctamente.

La sintaxis de la export_options parte de la declaración consta de la misma FIELDS y LINES cláusulas que se utilizan con la instrucción LOAD DATA. Para obtener información sobre las cláusulas FIELDS y LINES, incluidos sus valores predeterminados y permitidos, consulte la Sección 13.2.7, «Declaración LOAD DATA» .

FIELDS ESCAPED BY controla cómo escribir caracteres especiales. Si el carácter FIELDS ESCAPED BY no está vacío, se usa cuando necesario para evitar la ambigüedad como prefijo que precede a los siguientes caracteres en la salida:

  • El FIELDS ESCAPED BY carácter

  • El FIELDS ENCLOSED BY carácter

  • El primer carácter del FIELDS TERMINATED BY y LINES TERMINATED BY valores

  • ASCII NUL (el byte de valor cero; lo que en realidad está escrito después del carácter de escape es ASCII 0, no un byte de valor cero)

El FIELDS TERMINATED BY, ENCLOSED BY, ESCAPED BY , o LINES TERMINATED BY caracteres se deben escapar para que pueda volver a leer el archivo de manera confiable. ASCII NUL se escapa para que sea más fácil de ver con algunos buscapersonas.

El archivo resultante no necesita ajustarse a la sintaxis SQL, por lo que no es necesario escapar nada más.

Si el carácter FIELDS ESCAPED BY está vacío, no hay caracteres de escape y NULL se genera como NULL, no \N. Probablemente no sea una buena idea especificar un carácter de escape vacío, especialmente si los valores de campo de sus datos contienen alguno de los caracteres de la lista que se acaba de dar.

INTO OUTFILE también se puede utilizar con una instrucción TABLE cuando desee volcar todas las columnas de una tabla en una Archivo de texto. En este caso, el orden y el número de filas se pueden controlar usando ORDER BY y LIMIT; estas cláusulas deben preceder a INTO OUTFILE. TABLE ... INTO OUTFILE admite el mismo export_options que SELECT ... INTO OUTFILE, y está sujeto a las mismas restricciones al escribir en el sistema de archivos. Aquí se muestra un ejemplo de dicha declaración:

También puede usar SELECT ... INTO OUTFILE con una VALUES para escribir valores directamente en un archivo. Aquí se muestra un ejemplo:

Debe utilizar un alias de tabla; Los alias de columna también son compatibles y, opcionalmente, se pueden usar para escribir valores solo de las columnas deseadas. También puede utilizar cualquiera o todas las opciones de exportación admitidas por SELECT ... INTO OUTFILE para formatear la salida al archivo.

Aquí hay un ejemplo que produce un archivo en el formato de valores separados por comas (CSV) utilizado por muchos programas:

Si usa INTO DUMPFILE en lugar de INTO OUTFILE, MySQL escribe solo una fila en el archivo, sin ninguna terminación de columna o línea y sin realizar ningún procesamiento de escape. Esto es útil para seleccionar un valor BLOB y almacenarlo en un archivo.

Nota

Cualquier archivo creado por INTO OUTFILE o INTO DUMPFILE es propiedad del usuario del sistema operativo bajo cuya cuenta se ejecuta mysqld. (Nunca debe ejecutar mysqld como root por esta y otras razones). A partir de MySQL 8.0.17, la máscara de usuario para la creación de archivos es 0640; debe tener suficientes privilegios de acceso para manipular el contenido del archivo. Antes de MySQL 8.0.17, la umask es 0666 y todos los usuarios del servidor pueden escribir en el archivo.

Si la variable de sistema secure_file_priv se establece en un nombre de directorio no vacío, el archivo que se va a escribir debe estar ubicado en ese directorio.

En el contexto de SELECT ... INTO declaraciones que ocurren como parte de eventos ejecutados por el Programador de eventos, los mensajes de diagnóstico (no solo errores, sino también advertencias) se escriben en el registro de errores y, en Windows, al registro de eventos de la aplicación. Para obtener información adicional, consulte la Sección 25.4.5, «Estado del programador de eventos».

A partir de MySQL 8.0.22, se proporciona soporte para la sincronización periódica de archivos de salida escritos por SELECT INTO OUTFILE y SELECT INTO DUMPFILE, habilitados al configurar la select_into_disk_sync variable de sistema del servidor introducida en esa versión. El tamaño del búfer de salida y el retraso opcional se pueden establecer utilizando, respectivamente, select_into_buffer_size y select_into_disk_sync_delay. Para obtener más información, consulte las descripciones de estas variables del sistema.

Write a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *