MySQL 8.4 Release Notes
14.4.1 运算符优先级
运算符的优先级按照以下列表从高到低排列,同一行上的运算符具有相同的优先级。
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