読者です 読者をやめる 読者になる 読者になる

文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

LOAD DATAの罠

mysql

LOAD DATAは高速で非常に使い勝手がよいが、いくつか注意する点がある。
今回は LOAD DATA とエラーコードの関係について紹介。


試しにシェルスクリプトからLOAD DATAを実行する。読み込むファイルはわざとDuplicate Key Errorが出るようにしておく。

<t_test.csv


$ cat t_test.csv
1
1
1

<loadData.sql


$ cat loadData.sql
load data local infile 't_test.csv' into table t_test fields terminated by ',' enclosed by '' lines terminated by '\n';

<loadData.sh>


$ cat ./loadData.sh
#!/bin/sh

mysql -uroot test < loadData.sql

if [ $? -eq 1 ]; then
echo "error"
else
echo "success"
fi

loadData.shを実行してみる。さて・・・


$ ./loadData.sh
success

は!?successって???
どうやらDuplicate Key Errorはエラーとして扱われない模様・・・
これ、errorコード返るのか?loadData.sqlをわざとSyntaxErrorさせてみよう。
<loadData.sql


$ cat ./loadData.sql
load data local infile 't_test.csv' into table t_test fields terminated by ',' enclosed by '' lines terminated by '\n';
orz

よし、今度こそ・・・

$ ./loadData.sh
ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'orz' at line 1
error

ふむ。SyntaxErrorは問題ないのか。
結局csvの行数とinsert後のレコード数を比較するしかないのかなあ。

↓この記事でこれらの動作について解ったので、暇だったら見てね。
http://d.hatena.ne.jp/treeapps/20110409/1302332142