sql >> Database teknologi >  >> RDS >> Mysql

MySQL dumpe i CSV-tekstfiler med kolonnenavne øverst?

Jeg fandt ud af en vej uden om at skulle indtaste disse navne manuelt, så længe du kører MySQL 5 eller højere. Her er det skrevet som et bash-script til at køre på en unix-kommandolinje:

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

Selvom det ikke er den mest yndefulde løsning, er jeg sikker på, at den kan komprimeres til en enkelt linje af en person, der kender SQL og/eller bash lidt bedre end mig...

Hvad den gør er:

  1. bruger MySQL's informationsskema til at oprette en tom CSV med kolonneoverskrifter
  2. føjer en ekstra ny linje til den tomme CSV, så dine data begynder at blive vist en ny linje
  3. bruger en ret standard "SELECT * INTO OUTFILE..."-forespørgsel til at oprette en CSV fuld af data
  4. føjer datafilen til filen med kolonneoverskrifter
  5. sletter den (midlertidige) datafil

Held og lykke, og hvis du rydder op, så send dine resultater!



  1. #1221 - Forkert brug af OPDATERING og BESTIL EFTER

  2. Hvad er den bedste metode til at overføre parametre til SQLCommand?

  3. PERIOD_DIFF() Eksempler – MySQL

  4. Sådan eksporteres data til CSV-fil i Oracle ved hjælp af PL SQL-procedure