5.7. Importacion y exportacion de datos

5.7. Importacion y exportacion de datos Dataprix 16 Octubre, 2009 - 11:34

En muchas ocasiones es necesario mover datos de una aplicación a otra, para ello son necesarios formatos estándares que puedan ser escritos por la aplicación origen y leídos por la aplicación destino. El más simple de esos formatos es el texto plano, donde cada archivo es una tabla, cada fila es un registro y los valores de los campos se separan por tabuladores.

MySQL puede leer este tipo de archivos, incluyendo valores nulos representados por ’\N’(N mayúscula).s

Utilizando el cliente mysql, podemos introducir los datos del archivo local proveedores.txt en la tabla proveedores:

mysql> load data local infile ´proveedores.txt´
-> into table proveedores;

Si se omite la palabra local, MySQL buscará el archivo en el servidor y no en el cliente.

En un archivo se pueden entrecomillar los campos, utilizar comas para separarlos y  terminar  las  líneas  con  los caracteres  ’\r\n’  (como  en  los archivos Windows). El comando load data tiene dos clausulas opcionales, fields, en el que se especifican estos parámetros.

mysql> load data local infile ´prooveedores.txt´
-> fields terminated by ´,´
-> enclosed by ´"´
-> lines terminated by ´\r\n´;

La opción enclosed by puede tener la forma optionaly enclosed by, en caso de que los campos numéricos no sean delimitados.

Además pueden omitirse las primeras lineas del archivo si contienen información de encabezados:

 

mysql> load data local infile ´proveedores.txt´
-> ignore 1 lines;

5.7.1. mysqlimport

5.7.1. mysqlimport Dataprix 16 Octubre, 2009 - 11:41

La utilidad mysqlimport que se incluye en la distribución puede realizar el mismo trabajo que load data. Estos son algunos de sus parámetros:

mysqlimport basededatos archivo.txt

Estos son algunos de los argumentos de mysqlimport para realizar las tareas equivalentes a la sentencia load data:

--fields-terminated-by=
--fields-enclosed-by=
--fields-optionally-enclosed-by=
--fields-escaped-by=
--lines-terminated-by=

La forma más simple para exportar datos es redireccionando la salida del cliente mysql. El parámetro -e permite ejecutar un comando en modo de procesamiento por lotes. MySQL detecta si la salida es en pantalla o está redireccionada a un archivo y elige la presentación adecuada: con encabezados y líneas de separación para la salida en pantalla, y sin encabezados y con tabuladores para un archivo:

$ mysql demo -e "select * from proveedores" > proveedores.txt

La sentencia select también cuenta con una opción para realizar la tarea inversa de la sentencia load data:

mysql> select *
-> into outfile "/tmp/proveedores.txt"
-> fields termitated by ´,´
-> optionaly enclosed by ´"´
-> lines termitates by ´\n´
-> from proveedores;

5.7.2. mysqldump

5.7.2. mysqldump Dataprix 16 Octubre, 2009 - 11:46

La utilidad mysqldump realiza el volcado de bases de datos y puede utilizarse para transportar datos de una base a otra que también entienda SQL. Sin embargo, el archivo debe ser editado antes de utilizarse, ya que algunas opciones son exclusivas de MySQL. Por lo general, basta con eliminar el tipo de tabla que se especifica al final de un comando create table.

El siguiente comando realiza el vaciado completo de la base de datos demo:

$ mysqldump demo > demo.sql

En algunos casos, los comandos insert son suficientes y no necesitamos las definiciones de las tablas.

El siguiente comando realiza un vaciado de la tabla proveedores de la base de datos demo filtrando la salida con el comando grep de UNIX que selecciona sólo las líneas que contienen la palabra INSERT. De este modo, el archivo proveedores-insert.txt contiene exclusivamente comandos insert:

$ mysqldump demo proveedores | grep INSERT