mysql - 为什么涉及用户变量的表达式的求值顺序未定义?

标签 mysql sql operator-precedence mysql-variables

来自MySQL Manual以下查询的输出不保证始终相同。

SET @a := 0;

SELECT 
@a AS first,
@a := @a + 1 AS second,
@a := @a + 1 AS third,
@a := @a + 1 AS fourth,
@a := @a + 1 AS fifth,
@a := @a + 1 AS sixth;
<小时/>

输出:

first second third fourth fifth sixth 
  0     1      2     3     4      5

引用手册:

However,the order of evaluation for expressions involving user variables is undefined;

我想知道背后的故事。

所以我的问题是:为什么涉及用户变量的表达式的求值顺序未定义?

最佳答案

select 中表达式的求值顺序未定义。大多数情况下,您只有在有变量时才会注意到这一点,因为错误会导致错误的信息。

为什么? SQL 标准不要求计算的顺序,因此每个数据库可以自由决定如何计算表达式。通常,此类决定留给优化器。

关于mysql - 为什么涉及用户变量的表达式的求值顺序未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38923660/

相关文章:

PHP 数据库链接不起作用

php - MySQL - 将 1 添加到名称在反引号中的列

sql - 将 View 复制到另一个数据库

javascript - 优先于事件处理程序

c - 为什么 a++=5 是错误的?

c++ - 表达式的求值顺序

mysql - 使用 max sql 获取关联值

php删除文件夹并使用一个提交删除按钮从mysql数据库中删除一行

MySQL 构造查询

sql - 在连接表中查找两个 ID 之间的最短路径长度