В чем разница между операторами :=
и =
в MySql?
И в каком месте стабильно использовать эти два?
Это то же самое или просто альтернатива?
В чем разница между операторами :=
и =
в MySql?
И в каком месте стабильно использовать эти два?
Это то же самое или просто альтернатива?
Из вашего другого вопроса я знаю, что вы имеете в виду в случае использования
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 |
+-------+
Разница теперь понятна?
В операторе 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)