Importar datos CSV a MySQL

Existe una sentencia de comandos MySQL para importar un fichero separado por tabuladores, punto y coma, coma, etc. a una tabla de datos. Y yo creándome ficheros en php para tal fin… ya me vale.

¿De qué se trata?
El comando ‘load data’ nos permite importar a una tabla de datos de MySQL el contenido de un fichero delimitado por caracteres. Quién no ha tenido que traerse a la base de datos la lista de usuarios con sus correos electrónicos para manejarlos convenientemente con una aplicación que ataque a la base de datos? Pues eso hace este comando, pero sin tener previamente un script en php, por ejemplo, para importarlos.

¿A quién va dirigido?
A todos los que, como el menda, prefieren tener más tiempo libre y menos dedicado al trabajo. A veces… se puede.

Ejecutando
El comando es bastante sencillo. Desde la interfaz de comandos de nuestro sistema, entramos en la shell de comandos de MySQL:

$ mysql -u user_mysql -p

Damos un usuario con permisos, user_mysql, a la base de datos sobre la que vamos a trabajar y la contraseña.
Una vez dentro de la shell de mysql, escogemos la base de datos donde querramos importar los datos:

mysql> use db_mysql

Una vez en la base de datos, ejecutamos el comando para importar el fichero delimitado por caracteres:

mysql> LOAD DATA LOCAL INFILE '/fichero_por_punto_y_coma.csv'
INTO TABLE tabla_mysql FIELDS TERMINATED BY ';'
LINES TERMINATED BY 'r' (campo1, campo2, campo3);
Query OK, 106 rows affected (0.00 sec)
Records: 106  Deleted: 0  Skipped: 0  Warnings: 0

Una vez ejecutado, mysql nos informa de la ejecución (tiempo de ejecución, líneas añadidas a la tabla, si se ha borrado algún registro, si se ha omitido alguno y si alguno ha producido error). El fichero, al que se le pasa la ruta completa del disco duro, en este caso está en el raíz del disco de arranque (‘/fichero_por_punto_y_coma.csv’), se añade en local, podría hacerse en remoto, al host de la base de datos, pero para prevenir errores lo hemos colocado el equipo donde tenemos la base de datos. Al comando ‘LOAD DATA LOCAL INFILE’ le pasamos el fichero que vamos a importar, la tabla destino de la base, en este caso ‘usuarios’ y las siguientes opciones son referentes al contenido del fichero: carácter delimitador de la seperación de campos, en este caso ‘;’, pero podría ser tabulador (‘\t’), coma (‘,’), punto (‘.’) o cualquiera que querramos usar; terminador de línea, que en sistemas Mac es ‘\r’ y en Windows y Unix ‘\n’. Y finalmente, entre paréntesis, ponemos el orden de los campos de la tabla donde vamos a insertar los valores de nuestro fichero de texto.

Es muy sencillo y potente, podéis encontrar más información de este comando en la documentación de MySQL.

SaludoX