MySQLの書き順による、カラムの処理順序
MySQL系で以下の update文を実行して驚いた!
table xxxxx
pkey | col1 | col2 |
---|---|---|
1 | aaaaa | ccccc |
上記のようなテーブルにデータがある場合に以下のSQLを実行すると
update xxxxx set col2 = col1 ,col1 = 'bbbbb' where pkey = 1 ;
以下のように更新される
pkey | col1 | col2 |
---|---|---|
1 | bbbbb | aaaaa |
ところが、SQL文を以下のように書き換えると
update xxxxx set col1 = 'bbbbb' ,col2 = col1 where pkey = 1 ;
結果がこうなる。
pkey | col1 | col2 |
---|---|---|
1 | bbbbb | bbbbb |
えええええええ、そうなの????
pkey | col1 | col2 |
---|---|---|
1 | bbbbb | aaaaa |
じゃないの???
PostgreSQLだと、同一クエリー内で書き順は関係なく
並列に処理されましたが、MySQLの場合はそうではないんですね。
書いた順番のカラムごとに処理をしていくから、
下位の処理は上位の処理の影響をもろに受ける。
処理は並列ではなく直列でした。
知らなかった。。。。
今まで書いてたSQL文に一抹の不安を覚えた。