MySQL 8.0 语法结构
可使用 单引号 或 双引号 包裹。
Examples: 'a string' "another string"
连续的引号包裹的字符串,将被合并为一个。
| Escape Sequence | Character Represented by Sequence |
|---|---|
\0 |
An ASCII NUL (X'00') character |
\' |
A single quote (') character |
\" |
A double quote (") character |
\b |
A backspace character |
\n |
A newline (linefeed) character |
\r |
A carriage return character |
\t |
A tab character |
\Z |
ASCII 26 (Control+Z); see note following the table |
\\ |
A backslash (\) character |
\% |
A % character; see note following the table |
\_ |
A _ character; see note following the table |
包括 exact-value(整数 integer DECIMAL NUMERIC DEC FIXED 同义词)和 approximate-value(浮点 FLOAT DOUBLE)。
exact-value (fixed-point) number Examples: 1, .2, 3.4, -5, -6.78, +9.10.
approximate-value (floating-point) number Examples: 1.2E3, 1.2E-3, -1.2E3, -1.2E-3.
它们的值可以用很多格式代表,比如引用字符串或数字。
支持的格式:
-
标准 SQL 和 ODBC 的日期和时间:
DATE 'str'TIME 'str'TIMESTAMP 'str'{ d 'str' } { t 'str' } { ts 'str' }TIMESTAMP(1970-2038) 语法产生 DATETIME(0001-9999) 值。
-
字符串和数字:
yyyy-mm-ddyy-mm-dd(允许不严格语法,如'2012/12/31','2012^12^31'20070523'20070523')DATETIME 和 TIMESTAMP 的格式则是:
yyyy-mm-dd hh-mm-ssyy-mm-dd hh-mm-ss(也允许不严格语法20070523091528'19830905132800')对于 两位 的年份,如何解析?
70-99认为1970-1999,而00-69认为2000-2069。
使用 x'val' 或 0xval
Examples: x'01af’ X'01AF’ 0x01AF 0x01af
使用 b'val' 或 0bval,默认 binary 字符串。
Examples: b'01’ B'01’ 0b01
TRUE trueand FALSE false 相当于 1 and 0。
表示没有数据。
MySQL 中的对象,包括 database, table, index, column, alias, view, stored procedure, partition, tablespace, resource group and other object names are known as identifiers.
标识符可以以数字开头,但引号内不能完全由数字组成。
数据库、表和列名不能以空格字符结尾。
标识符引号是反引号(`)。
| Identifier Type | Maximum Length (characters) |
|---|---|
| Database | 64 (includes NDB Cluster 8.0.18 and later) |
| Table | 64 (includes NDB Cluster 8.0.18 and later) |
| Column | 64 |
| Index | 64 |
| Constraint | 64 |
| Stored Program | 64 |
| View | 64 |
| Tablespace | 64 |
| Server | 64 |
| Log File Group | 64 |
| Alias | 256 (see exception following table) |
| Compound Statement Label | 16 |
| User-Defined Variable | 64 |
| Resource Group | 64 |
对象名称可以是不合格的(没有歧义时允许)或合格的。
虽然数据库、表和触发器名称在某些平台上对大小写不敏感,但是不应该在同一语句中使用不同的大小写来引用这些名称。
分区、子分区、列、索引、存储例程、事件和资源组名在任何平台上都不区分大小写,列别名也不区分大小写。
详见 MySQL 8.0 Keywords and Reserved Words
您可以在一条语句中将值存储在用户定义的变量中,然后在另一条语句中引用它。这使您能够将值从一个语句传递到另一个语句。
用户变量被写为@var name,其中变量名var name由字母 数字 、. 、_和$组成。如果将用户变量名引用为字符串或标识符,则该变量名可以包含其他字符(例如@'my-var'、@"my-var"或 反引号包裹的)。
SET @v1 = X'41';
SET @v2 = X'41'+0;
SET @v3 = CAST(X'41' AS UNSIGNED);
SELECT @v1, @v2, @v3;
expr:
expr OR expr
| expr || expr
| expr XOR expr
| expr AND expr
| expr && expr
| NOT expr
| ! expr
| boolean_primary IS [NOT] {TRUE | FALSE | UNKNOWN}
| boolean_primary
boolean_primary:
boolean_primary IS [NOT] NULL
| boolean_primary <=> predicate
| boolean_primary comparison_operator predicate
| boolean_primary comparison_operator {ALL | ANY} (subquery)
| predicate
comparison_operator: = | >= | > | <= | < | <> | !=
predicate:
bit_expr [NOT] IN (subquery)
| bit_expr [NOT] IN (expr [, expr] ...)
| bit_expr [NOT] BETWEEN bit_expr AND predicate
| bit_expr SOUNDS LIKE bit_expr
| bit_expr [NOT] LIKE simple_expr [ESCAPE simple_expr]
| bit_expr [NOT] REGEXP bit_expr
| bit_expr
bit_expr:
bit_expr | bit_expr
| bit_expr & bit_expr
| bit_expr << bit_expr
| bit_expr >> bit_expr
| bit_expr + bit_expr
| bit_expr - bit_expr
| bit_expr * bit_expr
| bit_expr / bit_expr
| bit_expr DIV bit_expr
| bit_expr MOD bit_expr
| bit_expr % bit_expr
| bit_expr ^ bit_expr
| bit_expr + interval_expr
| bit_expr - interval_expr
| simple_expr
simple_expr:
literal
| identifier
| function_call
| simple_expr COLLATE collation_name
| param_marker
| variable
| simple_expr || simple_expr
| + simple_expr
| - simple_expr
| ~ simple_expr
| ! simple_expr
| BINARY simple_expr
| (expr [, expr] ...)
| ROW (expr, expr [, expr] ...)
| (subquery)
| EXISTS (subquery)
| {identifier expr}
| match_expr
| case_expr
| interval_expr
三种格式:
#直到行末--(double-dash) 直到行末/* */C 风格