Está en la página 1de 6

Importar|Exportar ficheros en MySQL

Breve informacin que contiene la sintaxis con su explicacin para la importacin y exportacin de ficheros en MySQL, incluye ejemplos probados en MySQL 5.6.12 usando WAMP Server 2.4 Al final de documento se incluye un pequeo glosario y un tip para realizar una correcta importacin de ficheros.

Quethzel
quethzel@gmail.com 16 de Septiembre del 2013

IMPORTAR DATOS A UNA TABLA MySQL DESDE UN FICHERO EXTERNO


MySQL permite importar y exportar datos desde o hacia ficheros de texto en diferentes formatos como .txt o .csv. Esto puede ser til para exportar los datos de una Base de Datos hacia un fichero que pueda ser procesado por otra aplicacin, para realizar copias de seguridad de la informacin de nuestras tablas o para importar datos hacia nuestras tablas. La instruccin LOAD DATA INFILE permite cargar datos desde un fichero externo y volcar su contenido dentro de una tabla.

Sintaxis:
LOAD DATA [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE tbl_name [FIELDS [TERMINATED BY '\t'] [[OPTIONALLY] ENCLOSED BY ''] [ESCAPED BY '\\' ] ] [LINES [STARTING BY ''] [TERMINATED BY '\n'] ] [IGNORE number LINES] [(col_name,...)]

Explicacin de la sintaxis:
LOCAL Indicar que el fichero a importar esta en nuestro ordenador y no en el servidor donde se encuentra la base de datos. INFILE ruta/del/fichero.ext Indica cual es la ruta de fichero a importar, se debe indicar el formato del fichero. [REPLACE | IGNORE] REPLACE Indica que agregara la fila remplazando la existente. Por ejemplo si un dato dentro del fichero tiene el mismo ID que un dato dentro de la tabla este ser remplazado por el valor del fichero. IGNORE Indica que sern ignoradas las filas del fichero que violen alguna restriccin (constraint). Por ejemplo que el tipo de dato en el fichero no coincide con el tipo de dato establecido en la base de datos. Solo se puede utilizar REPLACE o IGNORE, pero no ambos. Estas clusulas son tiles cuando se importan datos desde un fichero hacia una tabla que ya contiene datos, por ejemplo si tenemos una tabla productos y el fichero a importar contiene algunos productos con datos actualizados sera conveniente utilizar REPLACE de esta forma se actualizara los campos que ya est en la tabla y se agregaran los nuevos productos, pero si no estamos seguros de que datos son los ms actualizados podramos utilizar IGNORE de esta forma solo se agregaran los datos que no existan en la tabla o que no entren en conflictos con otros datos de la tabla. INTO TABLE nom_tabla Indica el nombre de la tabla sobre la cual se volcaran los datos del fichero a importar. Adicionalmente se puede indicar el conjunto de caracteres CHARACTER SET utf8 y el cotejamiento COLLATION utf8_general_ci. Se puede utilizar otros conjuntos de caracteres como Unicode o ANSI. Recomiendo el conjunto de caracteres utf8 y el cotejamiento utf8_general_ci para que puedas visualizar correctamente acentos y otros caracteres especiales. Si no se establece el conjunto de caracteres es comn que se ignoren todos los datos del fichero que contengan acentos o caracteres especiales. Por ejemplo si el fichero contiene la palabra Mxico solo se agregar M en la tabla ya que desconocer el carcter .

Lunes, 16 de septiembre de 2013

FIELDS Se refiere a las opciones de cada columna. TERMINATED BY carcter Indica cual es el carcter de separacin de columna. Por defecto el carcter utilizado es tabulador, pero podemos establecer otro carcter como: ( , ) ( ; ) ( : ) ( | ). [OPTIONALLY] ENCLOSED BY carcter Indica que los valores de cada columna sern entrecomillados. Por defecto no se entrecomilla ninguna columna, pero se puede utilizar cualquier carcter. La palabra OPTIONALLY indica que solo se entrecomillaran los valores de tipo texto y fecha. ESCAPED BY carcter Indica el carcter que se utilizara para escapar aquellos caracteres que puedan dificultar la lectura posterior del fichero. Como por ejemplo si utilizamos el carcter ( , ) como carcter de separacin de columna y nos encontramos con una columna de descripcin que tiene un carcter ( , ) como parte del dato a insertar, este ocasionara un problema ya que ser interpretado como carcter de separacin de columna. Para evitar este error utilizamos la clusula ESCAPED BY carcter as podemos escapar esa ( , ) que forma parte de nuestros datos anteponiendo el carcter de escape ( \ ). LINES Se refiere a las opciones para cada fila. STARTING BY Indica el carcter de inicio de cada lnea. Por defecto no se utiliza ningn carcter. TERMINATED BY carcter Permite elegir el carcter para indicar la terminacin de cada lnea. El carcter por defecto es el retorno de lnea (enter). Tambin se puede utilizar ( \r\n ). IGNORE n LINES Indica el nmero de lneas a ignorar al iniciar la lectura del fichero. Por ejemplo si se desea agregar una descripcin sobre que contiene el fichero, que codificacin utiliza, a que tabla debe de ir, etc. Esta descripcin se agrega en las primeras n lneas del fichero y al importar l fichero se hace uso de IGNORE n LINES. De esta manera sern ignoradas las primeras n lneas del fichero. [ (COL_NAME) ] Indica el orden en que se debern almacenar los datos del fichero con respecto a la tabla. Por defecto los datos de fichero sern almacenados en la tabla secuencialmente, es decir MySQL insertara el primer dato de la primera columna y el primer rengln en la primera columna y primero rengln de la tabla, pero si el fichero tiene una secuencia diferente debemos usar (col_name) para indicar el orden en que se deben almacenar los datos del fichero dentro de la tabla por ejempl: Capos dentro de la tabla: ID nombre segundoNom apellidoPat apellidoMat

Campos dentro del fichero: Viveros, Ramrez, , Viviana, 074A323 En este caso debemos especificar en la sentencia SQL el orden de insercin de los datos del fichero de la siguiente forma: (apellidoPat, apellidoMat, segundoNom, nombre, ID); Ya que el primer dato dentro del fichero corresponde al apellido paterno dentro de la tabla, el segundo al apellido materno, el tercer campo al segundo nombre, el cuarto campo al nombre y el ultimo al ID.

Ejemplo bsico de importacin de un fichero .txt:


LOAD DATA LOCAL INFILE c:/wamp/www/proyecto/usuarios.txt INTO TABLE usuarios FIELDS TERMINATED BY , LINES TERMINATED BY \n;

Lunes, 16 de septiembre de 2013

Ejemplo ms especfico (altamente recomendable):

La sentencia SQL:
LOAD DATA LOCAL INFILE "C:/wamp/www/estados.txt" INTO TABLE estados CHARACTER SET UTF8 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 2 LINES (stt_nom);

NOTA: Ignora las 2 primeras lneas que son la descripcin y una lnea en blanco y especifica la columna stt_nom ya que la primera columna en la BD es el ID de estado (stt_id). Agrega la correcta visualizacin de caracteres usando UTF8.

Lunes, 16 de septiembre de 2013

EXPORTAR DATOS DESDE UNA TABLA MySQL HACIA UN FICHERO EXTERNO


MySQL tambin permite generar ficheros de texto plano a partir de una tabla.

Sintaxis:
SELECT [campos...] [INTO OUTFIELD file_name export_options]

Explicacin de la sintaxis:
SELECT [campos] Selecciona los campos que se desean importar. Tambin se puede utilizar * para indicar la seleccin de todos los campos de la tabla. INTO OUTFIELD file_name Indica el nombre del fichero a crear (no debe existir). Las opciones de exportacin son las mismas que se describieron en el apartado de importacin de datos a MySQL desde un fichero externo.

Tip:
Se recomienda que al importar los datos desde un fichero .txt primero se verifique que la codificacin del fichero este en UFT8 ya que aun cuando se especifique en la consulta de MySQL UTF8, si el fichero de texto no est codificado en UTF8 la importacin de los datos posiblemente contenga errores en cada palabra que tenga acentos o algn carcter especial. Es comn que se utilice un bloc de notas para la creacin del fichero, por lo cual al guardar el fichero por default el bloc de notas mantiene una codificacin ANSI, es por ello que se debe cambiar la codificacin a UTF8. Si usted se encuentra en un sistema Linux o Unix puede utilizar Geany para crear sus ficheros. Desde mi punto de vista ya seas usuario Windows, Linux, Unix recomiendo Geany ya que considero que es mejor que bloc de notas y ms cmodo de utilizar. Pgina oficial de genay: http://www.geany.org/Main/HomePage

Ejemplo no probado: El siguiente ejemplo no ha sido probado, solo se inclue como informacin adicional. Uso de variables: Suponiendo que uno de nuestros datos dentro del fichero es de tipo fecha con formato DD/MM/YY y la tabla maneja un DATE YYY-MM-DD. Podemos utilizar variables de usuario anteponiendo el smbolo @ al campo que deseamos cambiar y almacenando su valor en una variable temporal. Ejemplo: Datos del fichero: Viviana, Viveros, Ramrez, 23/07/12, Sentecia SQL:
LOAD DATA LOCAL INFILE "C:/wamp/www/clientes.txt" INTO TABLE clientes CHARACTER SET UTF8 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n'(nom, apPaterno, apMaterno, @fecha); SET fecha_nacimiento = str_to_date(@fecha, %d-%m-%y);

Lunes, 16 de septiembre de 2013

Glosario:
csv del ingls comma-separated values. Es un tipo de documento en formato abierto sencillo para representar datos en forma de tabla, en las que las columnas se separan por comas o punto y coma y las filas por saltos de lnea. Los campos que contengan una coma, un salto de lnea o una comilla doble deben ser encerrados entre comillas dobles. Ms informacin en: http://es.wikipedia.org/wiki/CSV Constraint Se refiere a las restricciones de SQL que se utilizan para especificar las reglas para los datos en una tabla. Si hay cualquier violacin entre la restriccin y la accin de datos, la accin se interrumpe por la restriccin. Las violaciones se pueden dar por tratar de introducir un dato de tipo X en un capo de otro tipo Y. Por ejemplo insertar un VARCHAR en un INT o violar alguna de las siguientes restricciones: NOT NULL - Indica que una columna no puede almacenar el valor NULL. UNIQUE - Asegura que cada fila de una columna tenga un valor nico. PRIMARY KEY - Una combinacin de NOT NULL y UNIQUE. Asegura que una columna (o combinacin de dos o ms columnas) tiene una identidad nica que ayuda a encontrar un registro en particular en una tabla ms fcil y rpidamente. FOREIGN KEY - Asegurar la integridad referencial de los datos en una tabla para que coincida con los valores de otra tabla. CHECK - Asegura que el valor de una columna cumple una condicin especfica. DEFAULT - Establece un valor por defecto cuando no se especifica ningn valor para esa columna. Existen otras restricciones que no se describen en este documento como ENUM, SET, ZEROFILL, etc. Ms informacin en: http://dev.mysql.com/doc/refman/5.0/es/constraint-invalid-data.html

Lunes, 16 de septiembre de 2013

También podría gustarte