目录

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 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 风格

mysql 官方:Chapter 9 Language Structure