Añadir nuevas filas desde un archivo MySQL

Otro método para añadir filas a una tabla consiste en leerlas directamente desde un archivo, que puede incluir instrucciones INSERT o datos sin procesar. Por ejemplo, la distribución sampdb contiene el archivo insert_president.sql, con instrucciones INSERT para añadir nuevas filas a la tabla president. Si se encuentra en el mismo directorio que el archivo, puede ejecutar las intrucciones de esta forma:

% mysql sampdb < insert_president.sql

Si ya ha ejecutado mysql, puede utilizar un comando source para leer el archivo:

mysql> source insert_president.sql;

Si ha almacenado las filas como datos sin procesar en lugar de instrucciones INSERT, puede cargarlas con instrucciones LOAD DATA o con el programa cliente mysqlimport. La instrucción LOAD DATA lee los datos del archivo y se utiliza desde mysql:

mysql:
mysql> LOAD DATA LOCAL INFILE 'member.txt' INTO TABLE member;

Si el archivo de datos member.txt se encuentra en el directorio actual del cliente, la instrucción lo lee y envía sus contenidos al servidor para cargarlos en la tabla member.

De forma predeterminada, la instrucción LOAD DATA asume que los valores de columna están separados por tabuladores y que las líneas acaban en salto de línea. También que los valores se presentan en el mismo orden que las columnas de la tabla. Se pueden leer archivos en otros formatos o especificar un orden de columnas diferente.

La palabra clave LOCAL de la instrucción LOAD DATA hace que el programa cliente lea el archivo y se envíe al servidor. Puede omitir LOCAL pero el archivo tendría que encontrarse en el servidor y necesitaría el privilegio de acceso FILE, que la mayoría de usuarios MySQL no tienen. También debe especificar el nombre de ruta completo al archivo para que el servidor pueda localizarlo.

Si se genera el siguiente error con LOAD DATA LOCAL, puede que la función LOCAL esté deshabilitada de forma predeterminda:

ERROR 1148 (42000): The used command is not allowed with this MySQL version

Pruebe invocar mysql con la opción –local-infile. Por ejemplo:

%mysql --local-infile sampdb
mysql> LOAD DATA LOCAL INFILE 'member.txt' INTO TABLE member;

Si tampoco funciona, tendrá que indicar al servidor que habilite LOCAL.
Otra forma de cargar el archivo consiste en utilizar el programa cliente mysqlimport, que se invoca desde la línea de comandos y genera una instrucción LOAD DATA:

% mysqlimport --local sampdb member.txt

Como sucede con mysql, debe indicar los parámetros de conexión en la lína de comandos por delante del nombre de la base de datos.

En este caso, mysqlimport genera una instrucción LOAD DATA para cargar member.txt en la tabla member. Determina el nombre de la tabla del nombre del archivo de datos, utilizando todo lo que aparece hasta el primer punto. Por ejemplo, mysqlimport carga los archivos member.txt y president.txt en las tablas member y president. Por ello, debe elegir adecuadamente los nombre de archivo o mysqlimport no utilizará el nombre de tabla correcto. Si desea cargar los archivos member1.txt y member2.txt, mysqlimport intentaría cargarlos en las tablas member1 y member2. Si realmente quiere añadirlos a la tabla member, debería utilizar los nombres member.1.txt y member.2.txt o member.txt1 y member.txt2.

Comparte