MySQL 9.0 发行说明
运算符优先级如下所示,从最高优先级到最低优先级。同一行中显示的运算符具有相同的优先级。
INTERVAL
BINARY, COLLATE
!
- (unary minus), ~ (unary bit inversion)
^
*, /, DIV, %, MOD
-, +
<<, >>
&
|
= (comparison), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN, MEMBER OF
BETWEEN, CASE, WHEN, THEN, ELSE
NOT
AND, &&
XOR
OR, ||
= (assignment), :=
=
的优先级取决于它用作比较运算符 (=
) 还是赋值运算符 (=
)。当用作比较运算符时,它与 <=>
、>=
、>
、<=
、<
、<>
、!=
、IS
、LIKE
、REGEXP
和 IN()
具有相同的优先级。当用作赋值运算符时,它与 :=
具有相同的优先级。 第 15.7.6.1 节,“SET 语法用于变量赋值” 和 第 11.4 节,“用户定义的变量” 解释了 MySQL 如何确定应该应用的 =
的哪种解释。
对于在表达式中以相同优先级出现的运算符,求值从左到右进行,但赋值从右到左进行。
一些运算符的优先级和含义取决于 SQL 模式
默认情况下,
||
是逻辑OR
运算符。启用PIPES_AS_CONCAT
时,||
是字符串连接,其优先级介于^
和一元运算符之间。默认情况下,
!
的优先级高于NOT
。启用HIGH_NOT_PRECEDENCE
时,!
和NOT
具有相同的优先级。
运算符的优先级决定了表达式中各词语的求值顺序。要覆盖此顺序并明确地对词语进行分组,请使用括号。例如
mysql> SELECT 1+2*3;
-> 7
mysql> SELECT (1+2)*3;
-> 9