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文はトランザクションできる!!やったね!!