Dupliquer possible:
[.____] Comment exporter/vider un tableau MySQL en un fichier texte comprenant les noms de champs (AKA en-têtes ou noms de colonne)
J'utilise cet extrait SQL pour vider une table dans les fichiers texte CSV:
Sélectionnez * de la marque dans les champs Outfile "E: /Brand.csv" terminés par "," joint par "" "lignes terminées par"\n ";
Cependant, cette approche n'ajoute pas les noms de colonne au début du fichier CSV. Ma question est de savoir comment sélectionner également tous les noms de colonne/champ, comme ce que la phpmyadmin fait lorsque vous exportez la table et sélectionnez "Mettez les noms de champs dans la première ligne".
J'ai trouvé un moyen de devoir entrer manuellement ces noms aussi longtemps que vous exécutez MySQL 5 ou plus. Ici, c'est écrit comme un script Bash pour être exécuté sur une ligne de commande 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
Bien que pas la solution la plus gracieuse, je suis sûr que cela peut être comprimé dans une seule ligne par une personne qui sait SQL et/ou bash un peu mieux que moi ...
Ce que c'est:
Bonne chance, et si vous le nettoyez, postez vos résultats!
Je pense que cela fait ce que vous voulez. J'utilise MySQL 5.1.60, cela génère des noms de champs sur la première ligne. Cela utilisera "\ T" comme séparateur de champ, je ne suis pas sûr de savoir comment demander une virgule.
echo "SELECT * FROM brand;" | mysql -uXXX -pXXX databasename > brand.tsv