やりたいこと
作業手順に従ってSQLを更新する場合などに、大量のSQL文をコピペで一気に流したいことがあります。
update xxx set yyy = 'zzzzz1' where id = 1;
update xxx set yyy = 'zzzzz2' where id = 2;
update xxx set yyy = 'zzzzz3' where id = 3;
update xxx set yyy = 'zzzzz4' where id = 4;
update xxx set yyy = 'zzzzz5' where id = 5;
...
問題
しかし、そのままコピペしてMacOSのターミナルからMySQLのコマンドラインで流そうとすると、SQLの実行とペーストが連続で実行されるのが原因なのか、実行途中で以下のようにペーストが意図通り実行されずSyntax Errorになってしまうことがあります。(数が多くなると発生しやすくなります)
...
mysql> update xxx set yyy = 'zzz
'>
'> update xxx set yyy = 'zzzzz5' where id =
'>
...
ERROR 1064 (42000): 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 'zzz'
思いつく対処法としては、
- (insert文の場合)
value
ではなくvalues
を使って1クエリにする - コピペを細切れにして実行する
- クエリを記載したファイルを作成し、読み込ませて実行する
などの方法がありますが、いずれもコピペに比べると少し面倒です。
解決方法
ペースト途中でSQLが実行開始されてしまうことが原因であるため、改行を取り除いて1行の状態にしてコピペすることで解決しました。この程度の作業であればテキストエディタで簡単にできます。
update xxx set yyy = 'zzzzz1' where id = 1;update xxx set yyy = 'zzzzz2' where id = 2;update xxx set yyy = 'zzzzz3' where id = 3;update xxx set yyy = 'zzzzz4' where id = 4;update xxx set yyy = 'zzzzz5' where id = 5;...
おわりに
ニッチな状況だとは思いますが、どなたかの役に立てば幸いです。