javoaxian cambió a: javoaxian.me
Este blog se mantendrá como histórico del nuevo javoaxian.me. Por tal motivo, sólo serán creados post que harán referencia a los del nuevo blog. Si hay dudas y comentarios, favor de hacerlos en javoaxian.me.

jueves, 22 de mayo de 2008

Cargar información a una tabla en MySQL desde un archivo de texto

Muchas veces cuando desarrollamos un sistema, necesitamos cargar información que usamos en muchos de los sistemas que implementamos, como catálogo de estados, delegaciones, etc. y estos catálogos los exportamos en archivos de texto para posteriormente cargarlos en una nueva aplicación.

Para poder hacer esta acción en MySQL necesitaremos usar el comando LOAD DATA dentro del prompt de mysql.

Como primer paso para poder ejecutar este comando necesitamos que el administrador de mysql nos de permisos para ejecutar esta acción. Si contamos con la cuenta de root de mysql, nos loguearemos con dicha cuenta y daremos los permisos globales de FILE como a continuación se muestra:

javoaxian@sky:~$ mysql -u root -p mysql
mysql> GRANT FILE on *.* to 'usuario'@'localhost';

Para ejemplificar habilitaré mi cuenta en mysql.

mysql> GRANT FILE on *.* to 'javoaxian'@'localhost';

Los privilegios de FILE no están incluidos cuando damos permisos GRANT ALL por lo que se deberán asignar por aparte los privilegios de FILE a los usuario que deseemos que usen dichos privilegios.

Ahora podremos usar con la cuenta que especificamos tanto el comando LOAD DATA (para cargar información de archivos a una tabla) como el comando SELECT ... INTO OUTFILE (para mandar el resultado de una consulta a un archivo).

Para cargar el archivo de texto a una tabla, deberán de verificar que la tabla cuente con el mismo número de campos que el archivo de texto, por ejemplo si van a cargar un catálogo de países a lo mejor el archivo cuenta con una columna de id's y otra con los nombres de los países, por lo tanto, en nuestra base de datos deberemos tener creada la tabla pais con un campo que corresponda al id y otro para el nombre.

Para ejemplificar supondremos que nuestro archivo de texto tiene separados los campos con tabulador.

Ahora para cargar nuestro archivo de texto, por ejemplo paises.txt a la tabla pais, ingresaremos a nuestra base de datos con nuestra cuenta:

javoaxian@sky:~$ mysql -u javoaxian -p javoaxian

Una vez en nuestra base de datos ejecutaremos lo siguiente para cargar el archivo a nuestra tabla:

mysql> LOAD DATA INFILE '/ruta/archivo/paises.txt' INTO TABLE pais FIELDS TERMINATED BY '\t';

Esto cargará toda la información que tengamos en el archivo paises.txt a nuestra tabla pais.