違いは何ですか
set test_var = 20;
と
set test_var:=20;
両方とも値を割り当てているように見えるので?
違いは何ですか
set test_var = 20;
と
set test_var:=20;
両方とも値を割り当てているように見えるので?
それは多かれ少なかれシンタックスシュガーです。
こちらをご覧ください
最も重要な違いは
=とは異なり、:=演算子が比較演算子として解釈されることはありません。これは、(SETステートメントだけでなく)任意の有効なSQLステートメントで:=を使用して、変数に値を割り当てることができることを意味します。
どちらも代入演算子ですが、違いがわかるのは、=ブール演算を実行できるのに使用できるという:=ことです。
有効:SUM(val = 0)
無効:SUM(val:= 0)
もう1つ、SET以外のステートメントでユーザー変数に値を割り当てることもできます。この場合、代入演算子は=ではなく:=である必要があります。これは、後者が非SETステートメントで比較演算子=として扱われるためです。
mysql> SET @t1=1, @t2=2, @t3:=4;
mysql> SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3;
+------+------+------+--------------------+
| @t1  | @t2  | @t3  | @t4 := @t1+@t2+@t3 |
+------+------+------+--------------------+
|    1 |    2 |    4 |                  7 | 
+------+------+------+--------------------+
割り当てには:=のみを使用でき、比較には使用できません。これはほんの少しの構文糖衣であり、機能をまったく変更しません。コードから生成されたSQLでよく見られます。
andステートメントでの使用:=は、割り当てとして解釈されます。SETSELECT
ステートメントでの使用=は、SET割り当てとして解釈されます。
ただし、ステートメントでの使用=はSELECTブール演算子(比較)として解釈されます。
したがって、割り当てを意味する場合は、常に安全に使用できます:=