Каков порядок оценки в следующем запросе:
UPDATE tbl SET q = q + 1, p = q;
То есть для "tbl"."p"
будет установлено значение q
или q + 1
? Порядок оценки здесь регулируется стандартом SQL?
Спасибо.
UPDATE
После рассмотрения ответа Мига я провел несколько тестов на всех БД, которые смог найти. Хотя я не знаю, что говорится в стандарте, реализации могут отличаться.
Учитывая
CREATE TABLE tbl (p INT NOT NULL, q INT NOT NULL);
INSERT INTO tbl VALUES (1, 5); -- p := 1, q := 5
UPDATE tbl SET q = q + 1, p = q;
Я нашел значения "p"
и "q"
:
database p q
-----------------+---+---
Firebird 2.1.3 | 6 | 6 -- But see "Update 2" below
InterBase 2009 | 5 | 6
MySQL 5.0.77 | 6 | 6 -- See "Update 3" below
Oracle XE (10g) | 5 | 6
PostgreSQL 8.4.2 | 5 | 6
SQLite 3.3.6 | 5 | 6
SQL Server 2016 | 5 | 6
ОБНОВЛЕНИЕ 2
Firebird 2.5 меняет свое поведение, чтобы соответствовать большинству других протестированных мной движков SQL, оставляя MySQL в покое. Соответствующая запись примечаний к выпуску, «Логическое изменение в предложении SET» , настоятельно рекомендует, чтобы поведение большинства было правильным согласно спецификациям SQL .
Я прослушал MySQL, чтобы прокомментировать это поведение (ошибка № 52861 ), поскольку они кажутся выбросами.
ОБНОВЛЕНИЕ 3
Вышеупомянутая ошибка сегодня (2010-05-19) закрыта, и документация должна быть обновлена, чтобы сделать это поведение явным как в описании ОБНОВЛЕНИЕ , так и в Отличиях от стандартного SQL секция.
Bravo, MySQL.