本文介紹了PolarDB-X 1.0中運算子的優先順序。
PolarDB-X 1.0操作符的優先順序由高到低,如下所示:
| 優先順序 | 運算子 |
| 15 | ! |
| 14 | -(負號), ~ |
| 13 | ^ |
| 12 | *,/,%,MOD |
| 11 | +,- |
| 10 | <<,>> |
| 9 | & |
| 8 | | |
| 7 | =(比較子等於),<=>,>,>=,<,<=,<>,!=,IS,LIKE,REGEXP,IN |
| 6 | BETWEEN |
| 5 | NOT |
| 4 | AND, && |
| 3 | XOR |
| 2 | OR, || |
| 1 | =(賦值運算子) |
IN/NOT IN與=優先順序
在MySQL 5.7.19中執行如下SQL:
mysql> select binary 'a' = 'a' in (1, 2, 3);
+-------------------------------+
| binary 'a' = 'a' in (1, 2, 3) |
+-------------------------------+
| 1 |
+-------------------------------+
1 row in set, 1 warning (0.01 sec)
mysql> show warnings;
+---------+------+---------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'a' |
+---------+------+---------------------------------------+
1 row in set (0.00 sec)
mysql> select 1 in (1, 2, 3) = 'a';
+----------------------+
| 1 in (1, 2, 3) = 'a' |
+----------------------+
| 0 |
+----------------------+
1 row in set, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+---------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'a' |
+---------+------+---------------------------------------+
1 row in set (0.00 sec)
可見,在MySQL中,IN/NOT IN的優先順序高於=(比較子),在PolarDB-X 1.0中,嚴格按照以上優先順序實現,在優先順序相同的情況下,採用左結合的方式。