MySQL 8.3 Release Notes
操作符优先级从最高到最低显示在以下列表中。同一行上的操作符具有相同的优先级。
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 语法 for 变量赋值” 和 第 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