MySQL 8.4 版本說明
運算子優先順序如下列表所示,從最高優先順序到最低優先順序。在同一行顯示的運算子具有相同的優先順序。
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