違いは何ですか
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ステートメントでの使用:=
は、割り当てとして解釈されます。SET
SELECT
ステートメントでの使用=
は、SET
割り当てとして解釈されます。
ただし、ステートメントでの使用=
はSELECT
ブール演算子(比較)として解釈されます。
したがって、割り当てを意味する場合は、常に安全に使用できます:=