2014年2月12日水曜日

MysqlのデータをCSVファイルに出力する

MYSQLのデータをCSVファイルに出力しようとしたとき、オーソドックスなやり方はというと。

mysqlに接続したあとに、以下のコマンドでOKです。

SELECT col1, col2, FROM tbl INTO OUTFILE 'hoge.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"';

こうすると、hoge.csvは、mysqlのワーキングディレクトリ(?)に出力されます。


/var/lib/mysql/・・・
 …みたいなところ。

自分が神である環境であれば、これでいいのですが、常に/var/libあたりのファイルが扱えるとも限らない。
そんなときは、コマンドラインで…

mysql aa127w0a9d -e "SELECT col1, col2, FROM tbl " | sed -e 's/\t/,/g'  >  hoge.csv

・・・とすれば、切り抜けれそうです。

SELECT ふにゃらら INTO OUTFILE という文そのものが、システム管理者向けということですかね。


2014年2月7日金曜日

やってもうた(1) Mysqlで間違ったカラムに入れてしまったデータを入れ替える。

データベースからデータベースへのデータ移行で、カラムを間違ってデータを入れてしまった。
 テーブルには、companyとpersonがあるのだが・・・。

company:山田太郎
person:山田商事株式会社

…という具合に、間違えてしまった。大量のデータがあり、最初からやり直すことが出来ない状態・・・。

色々と調べてやってみたのが、下のSQLです。

単純に…

UPDATE tbl1 SET company = person, person = company;

…とやってみました。結果は…

company:山田商事株式会社
person:山田商事株式会社

なるほどねー。さらにやっちゃいました。。。
まあ、そりゃそーかという結果ではあります。

こういうときは、こうやるといいみたいです。

SET @swp = '';
UPDATE tbl1 SET company = CONCAT(LEFT((@swp := company),0) , person) ,person = @swp;

値が更新されるときに、一旦変数に蓄えて、その文字列を切り詰めた上で、交換する文字列を設定するということですかね。