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:
- bruger MySQL's informationsskema til at oprette en tom CSV med kolonneoverskrifter
- føjer en ekstra ny linje til den tomme CSV, så dine data begynder at blive vist en ny linje
- bruger en ret standard "SELECT * INTO OUTFILE..."-forespørgsel til at oprette en CSV fuld af data
- føjer datafilen til filen med kolonneoverskrifter
- sletter den (midlertidige) datafil
Held og lykke, og hvis du rydder op, så send dine resultater!