web-dev-qa-db-ja.com

MySQLは、列名が上部にあるCSVテキストファイルにダンプしますか?

可能性のある複製:
フィールド名(ヘッダーまたは列名)を含むテキストファイルにMySqlテーブルをエクスポート/ダンプする方法

このSQLスニペットを使用して、テーブルをCSVテキストファイルにダンプします。

SELECT * FROM INTO OUTFILE "e:/brand.csv" FIELDS TERMINATED BY '、' ENCLOSED BY '"' LINES TERMINATED BY"\n ";

ただし、このアプローチでは、CSVファイルの先頭に列名は追加されません。私の質問は、テーブルをエクスポートして「最初の行にフィールド名を入力する」を選択したときにphpMyAdminが行うのと同じように、すべての列/フィールド名を選択する方法です。

13
datasn.io

MySQL 5以降を実行している限り、これらの名前を手動で入力する必要がある方法を見つけました。これは、UNIXコマンドラインで実行するためのbashスクリプトとして記述されています。

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

最も優雅な解決策ではありませんが、SQLを知っている人や、私より少し上手にbashを書いた人なら、1行に圧縮できると思います...

それは何ですか:

  1. mySQLの情報スキーマを使用して、列ヘッダー付きの空のCSVを作成します
  2. 空のCSVに余分な改行を追加して、データが新しい行として表示されるようにします
  3. かなり標準的な「SELECT * INTO OUTFILE ...」クエリを使用して、データでいっぱいのCSVを作成します
  4. データファイルを列ヘッダー付きのファイルに追加します
  5. (一時的な)データファイルを削除します

頑張ってください、そしてそれを片付けたら、結果を投稿してください!

21
Amos

これはあなたが望んでいることだと思います。私はmysql 5.1.60を使用しています。これにより、最初の行にフィールド名が出力されます。これはフィールド区切り文字として「\ t」を使用します。代わりにカンマを要求する方法がわかりません。

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