Cómo importar el contenido de un fichero de texto plano a una tabla MySQL. Cada línea del fichero se corresponderá con un registro de la tabla MySQL. Para ello utilizaremos la función LOAD DATA INFILE de MySQL.
MySQL cuenta con un función muy útil para importar datos de forma automática, llamada LOAD DATA. Esta función permite importar a registros de una tabla MySQL el contenido de un fichero de texto plano.
El fichero de texto debe cumplir unos requisitos, obviamente, para que la función LOAD DATA pueda reconocerlos. A continuación os mostramos un ejemplo de contenido válido de este fichero.
Para realizar las pruebas oportunas crearemos, en primer lugar, una tabla en MySQL, con la siguiente consulta SQL:
1 2 3 4 5 6 7 8 |
create table importacion ( codigo int primary key, nombre varchar(100) unique not null, fecha date, importe float, observacion text, facturado varchar(1) ) |
Para ejecutar esta consulta SQL podemos utilizar el software Open Source AjpdSoft Administración Bases de Datos:
A continuación ejecutaremos la siguiente consulta SQL para comprobar que la tabla «importacion» se ha creado correctamente:
1 2 |
select * from importacion |
A continuación crearemos el fichero de texto plano (sin formato) que contendrá los registros que serán importados de forma automática en la tabla «importación» utilizando la función LOAD DATA de MySQL. Para ello crearemos un fichero (con el bloc de notas o cualquier otro editor de texto sin formato) con el siguiente contenido:
1,»Fernando Alonso»,2003-06-04,1000.20,»Prueba importación fichero 1″,»N»
2,»Alonso Fernando»,2008-08-31,900.34,»Prueba importación fichero 2″,»S»
3,»Juan Pérez»,2008-09-01,700.00,»Prueba importación fichero 3″,»S»
Y lo guardaremos con el nombre «importar.txt» en la unidad C.
Tras crear el fichero de texto plano abriremos el software de acceso a MySQL, AjpdSoft Administración Bases de Datos y ejecutaremos la siguiente consulta SQL:
1 2 3 4 |
LOAD DATA LOCAL INFILE 'c:/importar.txt' INTO TABLE importacion FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n' |
Ejecutando la consulta SQL:
1 |
select * from importacion |
Podremos ver el resultado de la importación del fichero de texto plano:
La función LOAD DATA LOCAL INFILE cuenta con varios parámetros de configuración:
- FIELDS TERMINATED BY ‘,’: indica que los campos de cada línea del fichero terminarán con «,» (coma), pudiendo indicar el carácter con el que terminarán.
- ENCLOSED BY ‘»‘: indica que los campos de tipo char, text, binary, enum de cada línea empezarán y acabarán con el carácter indicado, en este caso comillas dobles «»».
- IGNORE 1 LINES: no cargará la primera línea del fichero de texto.
- LINES STARTING BY ‘xxx’: indica que todas las líneas del fichero de texto plano empezarán con «xxx».
- LINES TERMINATED BY ‘
‘: indica el carácter con el que termina la línea, en este caso un salto de línea y un retorno de carro (en Windows).
Si quisiéramos que MySQL espere a ejecutar la sentencia de importación hasta que no haya usuarios leyendo en la tabla en la que se importarán podríamos utilizar la cláusula: LOW_PRIORITY, de esta forma:
LOAD DATA LOW_PRIORITY IN FILE…
Aunque esta propiedad es sólo válida para tablas MySQL de tipo MyISAM, MEMORY, MERGE.
También podremos indicar el juego de caracteres del fichero del que se importará la información, con:
LOAD DATA IN FILE…
CHARACTER SET juego_caracteres