Blog de Gonzalo

Blog de programación de Gonzalo López

CARGAR DATOS EN MYSQL DESDE UN FICHERO

MYSQL

En varios proyectos en los que he trabajado en necesitado cargar datos en una base de datos de mysql desde un fichero, ya que es una forma bastante rápida de cargar varios datos de una forma rápida y segura.

Métodos principales para cargar datos en MySQL
  • Usar el comando LOAD DATA INFILE de MySQL:
    • Ideal para archivos CSV o TXT con datos estructurados.
    • Es rápido y eficiente para grandes volúmenes de datos.
    • Requiere permisos adecuados en el servidor MySQL.
  • Ejecutar un archivo SQL con sentencias INSERT
    • Útil para archivos SQL generados por herramientas como mysqldump.
    • Se puede ejecutar desde la línea de comandos o mediante PHP.
Importar datos usando LOAD DATA INFILE desde MySQL
El comando LOAD DATA INFILE es la forma más eficiente de cargar datos desde un archivo CSV o TXT a una tabla MySQL.
Supongamos que tenemos una tabla usuarios con columnas: id (auto-incremental), nombre, email, edad. También tenemos un csv con datos para rellenar en la tabla:


nombre,email,edad
Juan,juan@example.com,25
Ana,ana@example.com,30
Para cargar dicho fichero en la tabla habría que hacer:


LOAD DATA INFILE '/ruta/absoluta/datos.csv'
INTO TABLE usuarios
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(nombre, email, edad);
  • FIELDS TERMINATED BY ',': Indica que las columnas están separadas por comas.
  • ENCLOSED BY '"': Si los valores están entre comillas, especifica el carácter.
  • LINES TERMINATED BY '\n': Indica que cada fila termina con un salto de línea.
  • IGNORE 1 ROWS: Ignora la primera fila si contiene encabezados.
  • /ruta/absoluta/datos.csv: Cambia por la ruta real del archivo. En servidores, puede ser necesario usar LOAD DATA LOCAL INFILE si el archivo está en el cliente.
Notas:
  • Permisos: El usuario de MySQL debe tener el privilegio FILE. Además, la variable secure_file_priv en MySQL puede restringir las rutas permitidas.
  • Ruta del archivo: Usa una ruta absoluta (por ejemplo, /var/www/datos.csv). Si usas LOCAL, el archivo debe estar en el cliente.
  • Habilitar LOCAL INFILE:
    • En el servidor MySQL, asegúrate de que local_infile esté habilitado: SET GLOBAL local_infile = 1;
    • En el cliente, mysql --local-infile=1.
Importar datos usando un archivo SQL
Si los datos están en un archivo SQL con sentencias INSERT (por ejemplo, generado por mysqldump), puedes ejecutarlo desde la consola o con PHP, habría que hacerlo de la siguiente manera:


mysql -u tu_usuario -p tu_base_datos < datos.sql

Compartir en twitter