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文に一抹の不安を覚えた。
0 件のコメント:
コメントを投稿