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-dd
yy-mm-dd
(允许不严格语法,如'2012/12/31'
,'2012^12^31'
20070523
'20070523'
)DATETIME 和 TIMESTAMP 的格式则是:
yyyy-mm-dd hh-mm-ss
yy-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
true
and 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 风格