# 12.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), :=
的优先级=
取决于它是否用作比较运算符 (=
) 或作为赋值运算符 (=
)。当用作比较运算符时,它的优先级与<=>
,>=
,>
,<=
,<
,<>
,!=
,是
,喜欢
,正则表达式
, 和在()
.当用作赋值运算符时,它的优先级与:=
.第 13.7.6.1 节,“变量赋值的 SET 语法”, 和第 9.4 节,“用户定义的变量”,解释一下MySQL是如何决定哪个解释的=
应该申请。
对于在表达式中以相同优先级出现的运算符,求值从左到右进行,但赋值从右到左求值的例外。
某些运算符的优先级和含义取决于 SQL 模式:
默认,
||
是一个合乎逻辑的要么
操作员。和PIPES_AS_CONCAT
启用,||
是字符串连接,优先级在^
和一元运算符。默认,
!
优先级高于不是
.和HIGH_NOT_PRECEDENCE
启用,!
和不是
具有相同的优先级。
运算符的优先级决定了表达式中项的计算顺序。要显式覆盖此顺序和组术语,请使用括号。例如:
mysql> SELECT 1+2*3;
-> 7
mysql> SELECT (1+2)*3;
-> 9