TiDB关键字、保留字和注释语法

关键字和保留字

关键字在 SQL 中有特殊的意义, 例如 SELECTUPDATEDELETE,在作为表名跟函数名的时候,需要特殊对待,例如作为表名,保留字需要被反引号包住:

CREATE TABLE select (a INT);
ERROR 1105 (HY000): line 0 column 19 near " (a INT)" (total length 27)
CREATE TABLE `select` (a INT);
Query OK, 0 rows affected (0.09 sec)

BEGINEND 是关键字, 但不是保留字,所以不需要反引号:

CREATE TABLE `select` (BEGIN int, END int);
Query OK, 0 rows affected (0.09 sec)

有一种特殊情况, 如果使用了限定符 .,那么也不需要用反引号:

CREATE TABLE test.select (BEGIN int, END int);
Query OK, 0 rows affected (0.08 sec)

下表列出了在 TiDB 中的关键字跟保留字,保留字用 ® 来标识:

  • ACTION
  • ADD ®
  • ADDDATE
  • ADMIN
  • AFTER
  • ALL ®
  • ALTER ®
  • ALWAYS
  • ANALYZE ®
  • AND ®
  • ANY
  • AS ®
  • ASC ®
  • ASCII
  • AUTO_INCREMENT
  • AVG
  • AVG_ROW_LENGTH
  • BEGIN
  • BETWEEN ®
  • BIGINT ®
  • BINARY ®
  • BINLOG
  • BIT
  • BIT_XOR
  • BLOB ®
  • BOOL
  • BOOLEAN
  • BOTH ®
  • BTREE
  • BY ®
  • BYTE
  • CASCADE ®
  • CASE ®
  • CAST
  • CHANGE ®
  • CHAR ®
  • CHARACTER ®
  • CHARSET
  • CHECK ®
  • CHECKSUM
  • COALESCE
  • COLLATE ®
  • COLLATION
  • COLUMN ®
  • COLUMNS
  • COMMENT
  • COMMIT
  • COMMITTED
  • COMPACT
  • COMPRESSED
  • COMPRESSION
  • CONNECTION
  • CONSISTENT
  • CONSTRAINT ®
  • CONVERT ®
  • COUNT
  • CREATE ®
  • CROSS ®
  • CURRENT_DATE ®
  • CURRENT_TIME ®
  • CURRENT_TIMESTAMP ®
  • CURRENT_USER ®
  • CURTIME
  • DATA
  • DATABASE ®
  • DATABASES ®
  • DATE
  • DATE_ADD
  • DATE_SUB
  • DATETIME
  • DAY
  • DAY_HOUR ®
  • DAY_MICROSECOND ®
  • DAY_MINUTE ®
  • DAY_SECOND ®
  • DDL
  • DEALLOCATE
  • DEC
  • DECIMAL ®
  • DEFAULT ®
  • DELAY_KEY_WRITE
  • DELAYED ®
  • DELETE ®
  • DESC ®
  • DESCRIBE ®
  • DISABLE
  • DISTINCT ®
  • DISTINCTROW ®
  • DIV ®
  • DO
  • DOUBLE ®
  • DROP ®
  • DUAL ®
  • DUPLICATE
  • DYNAMIC
  • ELSE ®
  • ENABLE
  • ENCLOSED
  • END
  • ENGINE
  • ENGINES
  • ENUM
  • ESCAPE
  • ESCAPED
  • EVENTS
  • EXCLUSIVE
  • EXECUTE
  • EXISTS
  • EXPLAIN ®
  • EXTRACT
  • FALSE ®
  • FIELDS
  • FIRST
  • FIXED
  • FLOAT ®
  • FLUSH
  • FOR ®
  • FORCE ®
  • FOREIGN ®
  • FORMAT
  • FROM ®
  • FULL
  • FULLTEXT ®
  • FUNCTION
  • GENERATED ®
  • GET_FORMAT
  • GLOBAL
  • GRANT ®
  • GRANTS
  • GROUP ®
  • GROUP_CONCAT
  • HASH
  • HAVING ®
  • HIGH_PRIORITY ®
  • HOUR
  • HOUR_MICROSECOND ®
  • HOUR_MINUTE ®
  • HOUR_SECOND ®
  • IDENTIFIED
  • IF ®
  • IGNORE ®
  • IN ®
  • INDEX ®
  • INDEXES
  • INFILE ®
  • INNER ®
  • INSERT ®
  • INT ®
  • INTEGER ®
  • INTERVAL ®
  • INTO ®
  • IS ®
  • ISOLATION
  • JOBS
  • JOIN ®
  • JSON
  • KEY ®
  • KEY_BLOCK_SIZE
  • KEYS ®
  • KILL ®
  • LEADING ®
  • LEFT ®
  • LESS
  • LEVEL
  • LIKE ®
  • LIMIT ®
  • LINES ®
  • LOAD ®
  • LOCAL
  • LOCALTIME ®
  • LOCALTIMESTAMP ®
  • LOCK ®
  • LONGBLOB ®
  • LONGTEXT ®
  • LOW_PRIORITY ®
  • MAX
  • MAX_ROWS
  • MAXVALUE ®
  • MEDIUMBLOB ®
  • MEDIUMINT ®
  • MEDIUMTEXT ®
  • MICROSECOND
  • MIN
  • MIN_ROWS
  • MINUTE
  • MINUTE_MICROSECOND ®
  • MINUTE_SECOND ®
  • MIN
  • MIN_ROWS
  • MINUTE
  • MINUTE_MICROSECOND
  • MINUTE_SECOND
  • MOD ®
  • MODE
  • MODIRY
  • MONTH
  • NAMES
  • NATIONAL
  • NATURAL ®
  • NO
  • NO_WRITE_TO_BINLOG ®
  • NONE
  • NOT ®
  • NOW
  • NULL ®
  • NUMERIC ®
  • NVARCHAR ®
  • OFFSET
  • ON ®
  • ONLY
  • OPTION ®
  • OR ®
  • ORDER ®
  • OUTER ®
  • PARTITION ®
  • PARTITIONS
  • PASSWORD
  • PLUGINS
  • POSITION
  • PRECISION ®
  • PREPARE
  • PRIMARY ®
  • PRIVILEGES
  • PROCEDURE ®
  • PROCESS
  • PROCESSLIST
  • QUARTER
  • QUERY
  • QUICK
  • RANGE ®
  • READ ®
  • REAL ®
  • REDUNDANT
  • REFERENCES ®
  • REGEXP ®
  • RENAME ®
  • REPEAT ®
  • REPEATABLE
  • REPLACE ®
  • RESTRICT ®
  • REVERSE
  • REVOKE ®
  • RIGHT ®
  • RLIKE ®
  • ROLLBACK
  • ROW
  • ROW_COUNT
  • ROW_FORMAT
  • ROWS ®
  • SCHEMA
  • SCHEMAS
  • SECOND
  • SECOND_MICROSECOND ®
  • SELECT ®
  • SERIALIZABLE
  • SESSION
  • SET ®
  • SHARE
  • SHARED
  • SHOW ®
  • SIGNED
  • SMALLINT ®
  • SNAPSHOT
  • SOME
  • SQL_CACHE
  • SQL_CALC_FOUND_ROWS ®
  • SQL_NO_CACHE
  • START
  • STARTING ®
  • STATS
  • STATS_BUCKETS
  • STATS_HISTOGRAMS
  • STATS_META
  • STATS_PERSISTENT
  • STORED ®
  • SUBDATE
  • SUBSTR
  • SUBSTRING
  • SUM
  • SUPER
  • TABLE ®
  • TABLES
  • TERMINATED ®
  • TEXT
  • THAN
  • THEN ®
  • TIDB
  • TIDB_INLJ
  • TIDB_SMJ
  • TIME
  • TIMESTAMP
  • TIMESTAMPADD
  • TIMESTAMPDIFF
  • TINYBLOB ®
  • TINYINT ®
  • TINYTEXT ®
  • TO ®
  • TRAILING ®
  • TRANSACTION
  • TRIGGER ®
  • TRIGGERS
  • TRIM
  • TRUE ®
  • TRUNCATE
  • UNCOMMITTED
  • UNION ®
  • UNIQUE ®
  • UNKNOWN
  • UNLOCK ®
  • UNSIGNED ®
  • UPDATE ®
  • USE ®
  • USER
  • USING ®
  • UTC_DATE ®
  • UTC_TIME ®
  • UTC_TIMESTAMP ®
  • VALUE
  • VALUES ®
  • VARBINARY ®
  • VARCHAR ®
  • VARIABLES
  • VIEW
  • VIRTUAL ®
  • WARNINGS
  • WEEK
  • WHEN ®
  • WHERE ®
  • WITH ®
  • WRITE ®
  • XOR ®
  • YEAR
  • YEAR_MONTH ®
  • ZEROFILL ®

注释语法

TiDB 支持三种注释风格:

  • 用 # 注释一行
  • 用 – 注释一行,用 – 注释必须要在其之后留出至少一个空格。
  • 用 /* */ 注释一块,可以注释多行。
    例:
SELECT 1+1;     # 注释文字
+------+
| 1+1  |
+------+
|    2 |
+------+
1 row in set (0.00 sec)
SELECT 1+1;     -- 注释文字
+------+
| 1+1  |
+------+
|    2 |
+------+
1 row in set (0.00 sec)
SELECT 1 /* 这是行内注释文字 */ + 1;
+--------+
| 1  + 1 |
+--------+
|      2 |
+--------+
1 row in set (0.01 sec)
SELECT 1+
    -> /*
   /*> 这是一条
   /*> 多行注释
   /*> */
    -> 1;
+-------+
| 1+

1 |
+-------+
|     2 |
+-------+
1 row in set (0.00 sec)
SELECT 1+1--1;
+--------+
| 1+1--1 |
+--------+
|      3 |
+--------+
1 row in set (0.01 sec)

TiDB 也跟 MySQL 保持一致,支持一种 C 风格注释的变体:

/*! Specific code */

在这种格式中,TiDB 会执行注释中的语句,这个语法是为了让这些 SQL 在其他的数据库中被忽略,而在 TiDB 中被执行。

例如:SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...

在 TiDB 中,这种写法等价于 SELECT STRAIGHT_JOIN col1 FROM table1,table2 WHERE …

如果注释中指定了 Server 版本号,例如 /*!50110 KEY_BLOCK_SIZE=1024 */,在 MySQL 中表示只有 MySQL 的版本大于等于 5.1.10 才会处理这个 comment 中的内容。但是在 TiDB 中,这个版本号不会起作用,所有的 comment 都会处理。

还有一种注释会被当做是优化器 Hint 特殊对待:

SELECT /*+ hint */ FROM ...;

由于 hint 包含在类似 /*+ xxx */ 的 comment 里,MySQL 客户端在 5.7.7 之前,会默认把 comment 清除掉,如果需要在旧的客户端使用 hint,需要在启动客户端时加上 –comments 选项,例如 mysql -h 127.0.0.1 -P 4000 -uroot –comments

你可能感兴趣的:(TiDB)