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