2017-07-03 10 views
0

列がid,a,bであり、値が(123, 'foo', 'bar')の行があるテーブルmytableがあるとします。UPDATEは、指定された順序でSET割り当てを実行することが保証されていますか?

私はこのクエリを実行する:

UPDATE mytable SET b=a, a='boom' WHERE id=123 

Iは、2つの割り当てが所定の順序で実行することを期待したい、従って得られた行が(123, 'boom', 'foo')あることが、この保証されていますか?

実行順序が未定義であるため、理論上、オプティマイザが逆順で実行することを決定した場合は、(123, 'boom', 'boom')となります。

MySQLのドキュメントでは、割り当てがクエリに表示される順序で実行されることは明示的に記載されていません。

+0

私は何も想定しないだろう、この5月将来的に変化するものであり、両方の値を割り当てて戻ってきて、ソフトウェアの更新が終わると動作を停止するコードを書くのに時間がかかります。 –

答えて

0

Mysql UPDATE documentationは、左から右に

単一テーブルUPDATE割り当ては、一般的に評価されていないと言います。複数テーブルの更新の場合、特定の順序で割り当てが行われるという保証はありません。

ですから、他の値で一つの列を更新している場合には安全のために、私は別のクエリへUPDATE文を分割したい:

-- do all the fixed value updates here 
UPDATE mytable SET a='boom', x='whatever' WHERE id=123; 
-- do "relational" updates here, after the values have been updated 
UPDATE mytable SET b=a     WHERE id=123; 
関連する問題