txt tabla para leer importar importación guardar exportar exportación ejemplos desde crear como cargar asistente archivo sql mysql csv export header-row

tabla - MySQL volcado en archivos de texto CSV con nombres de columna en la parte superior?



importar archivo sql a sql server (2)

Posible duplicado:
Cómo exportar / volcar una tabla MySql en un archivo de texto que incluye los nombres de campo (también llamados encabezados o nombres de columna)

Uso este fragmento de SQL para volcar una tabla en archivos de texto CSV:

SELECCIONE * FROM marca INTO OUTFILE "e: /brand.csv" CAMPOS TERMINADOS POR '','' CERRADO POR '''' ''LÍNEAS TERMINADAS POR'' / n '''';

Sin embargo, este enfoque no agrega los nombres de las columnas al comienzo del archivo CSV. Mi pregunta es cómo seleccionar todos los nombres de columna / campo, al igual que lo que hace phpMyAdmin cuando exporta la tabla y selecciona "Poner nombres de campos en la primera fila".


Descubrí una manera de tener que ingresar esos nombres manualmente siempre que ejecute MySQL 5 o superior. Aquí está, escrito como un script bash para ejecutar en una línea de comandos de Unix:

DBNAME=<database_name> TABLE=<table_name> FNAME=/path/to/output/dir/$(date +%Y.%m.%d)-$DBNAME.csv #(1)creates empty file and sets up column names using the information_schema mysql -u <username> -p<password> $DBNAME -B -e "SELECT COLUMN_NAME FROM information_schema.COLUMNS C WHERE table_name = ''$TABLE'';" | awk ''{print $1}'' | grep -iv ^COLUMN_NAME$ | sed ''s/^/"/g;s/$/"/g'' | tr ''/n'' '','' > $FNAME #(2)appends newline to mark beginning of data vs. column titles echo "" >> $FNAME #(3)dumps data from DB into /var/mysql/tempfile.csv mysql -u <username> -p<password> $DBNAME -B -e "SELECT * INTO OUTFILE ''/var/mysql/tempfile.csv'' FIELDS TERMINATED BY '','' OPTIONALLY ENCLOSED BY ''/"'' FROM $TABLE;" #(4)merges data file and file w/ column names cat /var/mysql/tempfile.csv >> $FNAME #(5)deletes tempfile rm -rf /var/mysql/tempfile.csv

Si bien no es la solución más elegante, estoy seguro de que puede ser comprimida en una sola línea por alguien que sabe SQL y / o bash un poco mejor que yo ...

Lo que hace es:

  1. usa el esquema de información de MySQL para crear un CSV vacío con encabezados de columna
  2. agrega una nueva línea adicional a ese CSV vacío para que sus datos comiencen a aparecer una nueva línea
  3. utiliza una consulta bastante estándar "SELECT * INTO OUTFILE ..." para crear un archivo CSV lleno de datos
  4. Anexa el archivo de datos en el archivo con los encabezados de columna
  5. borra el archivo de datos (temporal)

¡Buena suerte, y si lo limpias, publica tus resultados!


Creo que esto hace lo que quieres. Estoy usando mysql 5.1.60, esto arroja nombres de campo en la primera línea. Esto usará "/ t" como el separador de campo, no estoy seguro de cómo pedir una coma.

echo "SELECT * FROM brand;" | mysql -uXXX -pXXX databasename > brand.tsv