2014年6月25日水曜日

MySQLの書き順による、カラムの処理順序



MySQL系で以下の update文を実行して驚いた!


table xxxxx







pkeycol1col2
1aaaaaccccc

上記のようなテーブルにデータがある場合に以下のSQLを実行すると



update xxxxx set
col2 = col1
,col1 = 'bbbbb'
where
pkey = 1
;


以下のように更新される







pkeycol1col2
1bbbbbaaaaa




ところが、SQL文を以下のように書き換えると







update xxxxx set
col1 = 'bbbbb'
,col2 = col1
where
pkey = 1
;


結果がこうなる。







pkeycol1col2
1bbbbbbbbbb

えええええええ、そうなの????







pkeycol1col2
1bbbbbaaaaa

じゃないの???





PostgreSQLだと、同一クエリー内で書き順は関係なく


並列に処理されましたが、MySQLの場合はそうではないんですね。


書いた順番のカラムごとに処理をしていくから、


下位の処理は上位の処理の影響をもろに受ける。


処理は並列ではなく直列でした。





知らなかった。。。。





今まで書いてたSQL文に一抹の不安を覚えた。





0 件のコメント: