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

helen's blog

ぽんこつによるぽんこつのためのぽんこつブログ

ついにトランザクションできたのにYou can't specify target tableされた

You can't specify target table

You can't specify target table 'x' for update in FROM clause

UPDATE t1 SET column2 = (SELECT MAX(column1) FROM t1);

updateの対象とサブクエリのfromに同じテーブルが入ってるとエラーになるらしい
MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.10.9 サブクエリーのエラー

mysqlの-eオプションで操作前後を簡単に比較する

-eオプション:ターミナルからSQLを実行できる

$ mysql -u hoge -p -e 'select ~~~'

的な
さらにこれをいろいろ組み合わせて

# 対象をselectしてテキストに保存
$ mysql -u hoge -p -e 'select ~~~' > before.txt

# mysqlでデータ操作する
mysql> update ~~~

# 再度同じselectを別のファイルに保存
$ mysql -u hoge -p -e 'select ~~~' > after.txt

$ diff before.txt after.txt

ってやるとupdate前後を簡単に比較できるよ!
という話
だけどdiffが微妙なのでdiffの仕方を変えるか
add columnで他の定義変わってないよね〜の確認にはいいかもしれない

というのを教えていただきましたというメモ!!
あとupdate文はトランザクションできる!!やったね!!