В чем разница между операторами: = и =?

В чем разница между операторами := и = в MySql?

И в каком месте стабильно использовать эти два?

Это то же самое или просто альтернатива?

Ответ 1

Из вашего другого вопроса я знаю, что вы имеете в виду в случае использования

SELECT variable = column FROM table;

Идите вперед и убедитесь сами...

CREATE TABLE foo (id int);
INSERT INTO foo VALUES (1), (2), (3);

SET @asdf = 2; 
SET @asdf := 2; /*those are the same*/
/*As SET is always an assignment operation, it doesn't matter here if you write it with := or with =*/
SELECT id, @asdf, @asdf = id FROM foo;

возвращает

+------+-------+------------+
| id   | @asdf | @asdf = id |
+------+-------+------------+
|    1 |     2 |          0 |
|    2 |     2 |          1 |
|    3 |     2 |          0 |
+------+-------+------------+

В результате a 0 в последнем столбце равно false, a 1 равно true.

SELECT @asdf := id FROM foo;

возвращает

+-------------+
| @asdf := id |
+-------------+
|           1 |
|           2 |
|           3 |
+-------------+

поскольку значение id присваивается переменной @asdf

Если вы сейчас выпустили

SELECT @asdf;

он возвращает

+-------+
| @asdf |
+-------+
|     3 |
+-------+

потому что последняя строка, содержащая 3, была выбрана последним.

SELECT @asdf := id FROM foo ORDER BY id DESC;

возвращает

+-------------+
| @asdf := id |
+-------------+
|           3 |
|           2 |
|           1 |
+-------------+

Теперь

SELECT @asdf;

возвращает

+-------+
| @asdf |
+-------+
|     1 |
+-------+

Разница теперь понятна?

Ответ 2

Ответ

В операторе SET оба := и = являются операторами присваивания.

В операторе SELECT := является оператором присваивания, а = является оператором равенства.

Пример

SET @a = 1, @b := 2;
SELECT @a, @b;   -- 1, 2
SELECT @a = @b;  -- 0 (false)

SELECT @a := @b; -- 2
SELECT @a, @b;   -- 2, 2
SELECT @a = @b;  -- 1 (true)