19

違いは何ですか

set test_var = 20;

set test_var:=20;

両方とも値を割り当てているように見えるので?

4

4 に答える 4

16

それは多かれ少なかれシンタックスシュガーです。

こちらをご覧ください

最も重要な違いは

=とは異なり、:=演算子が比較演算子として解釈されることはありません。これは、(SETステートメントだけでなく)任意の有効なSQLステートメントで:=を使用して、変数に値を割り当てることができることを意味します。

于 2013-03-25T11:49:14.643 に答える
16

どちらも代入演算子ですが、違いがわかるのは、=ブール演算を実行できるのに使用できるという:=ことです。

有効:SUM(val = 0)
無効:SUM(val:= 0)

FROMユーザー定義変数

もう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 | 
+------+------+------+--------------------+
于 2013-03-25T11:50:47.133 に答える
3

割り当てには:=のみを使用でき、比較には使用できません。これはほんの少しの構文糖衣であり、機能をまったく変更しません。コードから生成されたSQLでよく見られます。

于 2013-03-25T11:51:32.300 に答える
0

andステートメントでの使用:=は、割り当てとして解釈されます。SETSELECT

ステートメントでの使用=は、SET割り当てとして解釈されます。

ただし、ステートメントでの使用=SELECTブール演算子(比較)として解釈されます。

したがって、割り当てを意味する場合は、常に安全に使用できます:=

于 2022-01-09T16:13:37.703 に答える