sql >> データベース >  >> RDS >> Mysql

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

    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. (一時的な)データファイルを削除します

    頑張ってください、そしてあなたがそれをきれいにするならば、あなたの結果を投稿してください!



    1. utf8を使用するかどうか-MySQLおよびPHPの文字エンコードの問題

    2. Mac上のDockerマシン:docker host / docker-machineにマウントされたボリュームが表示されませんか?ボリュームは物理的にどこに保存されますか?

    3. JDBCResultSetgetDateは精度を失います

    4. mySQLは重複を見つけて削除します