SQL 方言与一致性
本页介绍 TiDB Cloud Lake 支持的 SQL 方言,以及它对 SQL 标准的符合情况,重点说明 SQL:2011 特性及其在 TiDB Cloud Lake 中的支持状态。
支持的 SQL 方言
SQL 方言是指结构化查询语言(Structured Query Language)的一种特定变体或风格。TiDB Cloud Lake 默认支持 PostgreSQL 方言,并且可以灵活切换到其他受支持的方言。有关支持的方言及其简要说明,请参见下表:
| 方言 | 简介 | 了解更多 |
|---|---|---|
PostgreSQL | 默认支持的方言,常用于企业环境 | https://www.postgresql.org/ |
MySQL | 开源数据库管理系统 | https://www.mysql.com/ |
Hive | 用于大数据处理的数据仓库 | https://hive.apache.org/ |
Prql | PRQL 是一种现代数据转换语言——可作为简单、强大且支持管道式处理的 SQL 替代方案 | https://github.com/PRQL/prql |
Experimental | 用于测试和研究的实验性方言 | N/A |
如需在支持的 SQL 方言之间切换,或显示当前方言,请使用 sql_dialect 设置:
-- Set SQL dialect to PRQL
SET sql_dialect = 'Prql';
-- Display current dialect
SHOW SETTINGS LIKE 'sql_dialect';
SQL 一致性摘要
TiDB Cloud Lake 致力于遵循 SQL 标准,尤其支持 ISO/IEC 9075:2011,也称为 SQL:2011。虽然这并不是一份完整的符合性声明,但 TiDB Cloud Lake 已实现 SQL 标准要求的许多特性,只是在语法或函数上通常存在一些细微差异。本页概述了 TiDB Cloud Lake 对 SQL:2011 标准的符合程度。
| Feature ID | 功能名称 | 是否支持 | 说明 |
|---|---|---|---|
| E011 | 数值数据类型 | Yes | |
| E011-01 | INTEGER 和 SMALLINT 数据类型 | Yes | |
| E011-02 | REAL、DOUBLE PRECISION 和 FLOAT 数据类型 | Yes | |
| E011-03 | DECIMAL 和 NUMERIC 数据类型 | Yes | |
| E011-04 | 算术运算符 | Yes | |
| E011-05 | 数值比较 | Yes | |
| E011-06 | 数值数据类型之间的隐式类型转换 | Yes | |
| E021 | 字符字符串类型 | Partial | |
| E021-01 | CHARACTER 数据类型 | No | 不支持定长字符串类型 |
| E021-02 | CHARACTER VARYING 数据类型 | Yes | |
| E021-03 | 字符字面量 | Yes | |
| E021-04 | CHARACTER_LENGTH 函数 | Yes | |
| E021-05 | OCTET_LENGTH 函数 | Yes | |
| E021-06 | SUBSTRING | Yes | |
| E021-07 | 字符串拼接 | Yes | |
| E021-08 | UPPER 和 LOWER 函数 | Yes | |
| E021-09 | TRIM 函数 | Yes | |
| E021-10 | 定长和变长字符字符串类型之间的隐式类型转换 | No | 不支持定长字符串类型 |
| E021-11 | POSITION 函数 | Yes | |
| E021-12 | 字符比较 | Yes | |
| E031 | 标识符 | Yes | |
| E031-01 | 定界标识符 | Yes | |
| E031-02 | 小写标识符 | Yes | |
| E031-03 | 尾随下划线 | Yes | |
| E051 | 基本查询规范 | Partial | |
| E051-01 | SELECT DISTINCT | Yes | |
| E051-02 | GROUP BY 子句 | Yes | |
| E051-04 | GROUP BY 可以包含未出现在 SELECT 列表中的列 | Yes | |
| E051-05 | 可以重命名选择项 | Yes | |
| E051-06 | HAVING 子句 | Yes | |
| E051-07 | select 列表中的限定 * | No | |
| E051-08 | FROM 子句中的相关名称 | Yes | |
| E051-09 | 在 FROM 子句中重命名列 | No | |
| E061 | 基本谓词和搜索条件 | Partial | |
| E061-01 | 比较谓词 | Yes | |
| E061-02 | BETWEEN 谓词 | Yes | |
| E061-03 | 带值列表的 IN 谓词 | Yes | |
| E061-04 | LIKE 谓词 | Yes | |
| E061-05 | LIKE 谓词:ESCAPE 子句 | No | |
| E061-06 | NULL 谓词 | Yes | |
| E061-07 | 量化比较谓词 | Yes | |
| E061-08 | EXISTS 谓词 | Yes | |
| E061-09 | 比较谓词中的子查询 | Yes | |
| E061-11 | IN 谓词中的子查询 | Yes | |
| E061-12 | 量化比较谓词中的子查询 | Yes | |
| E061-13 | 相关子查询 | Yes | |
| E061-14 | 搜索条件 | Yes | |
| E071 | 基本查询表达式 | Partial | |
| E071-01 | UNION DISTINCT 表运算符 | Yes | |
| E071-02 | UNION ALL 表运算符 | Yes | |
| E071-03 | EXCEPT DISTINCT 表运算符 | Yes | |
| E071-05 | 通过表运算符组合的列不需要具有完全相同的数据类型 | Partial | 仅允许可进行隐式强制转换的数据类型列通过表运算符进行组合。 |
| E071-06 | 子查询中的表运算符 | Yes | |
| E081 | 基本权限 | Partial | |
| E081-01 | 表级 SELECT 权限 | Yes | |
| E081-02 | DELETE 权限 | Yes | |
| E081-03 | 表级 INSERT 权限 | Yes | |
| E081-04 | 表级 UPDATE 权限 | Yes | |
| E081-05 | 列级 UPDATE 权限 | No | |
| E081-06 | 表级 REFERENCES 权限 | No | |
| E081-07 | 列级 REFERENCES 权限 | No | |
| E081-08 | WITH GRANT OPTION | No | |
| E081-09 | USAGE 权限 | No | |
| E081-10 | EXECUTE 权限 | No | |
| E091 | 集合函数 | Yes | |
| E091-01 | AVG | Yes | |
| E091-02 | COUNT | Yes | |
| E091-03 | MAX | Yes | |
| E091-04 | MIN | Yes | |
| E091-05 | SUM | Yes | |
| E091-06 | ALL 量词 | Yes | |
| E091-07 | DISTINCT 量词 | Partial | 当前,TiDB Cloud Lake 支持 COUNT(DISTINCT ...) 和 SELECT DISTINCT ... 查询。 |
| E101 | 基本数据操作 | Partial | |
| E101-01 | INSERT 语句 | Yes | |
| E101-03 | 搜索式 UPDATE 语句 | Yes | |
| E101-04 | 搜索式 DELETE 语句 | Yes | |
| E111 | 单行 SELECT 语句 | Yes | |
| E121 | 基本游标支持 | Partial | |
| E121-01 | DECLARE CURSOR | No | |
| E121-02 | ORDER BY 列不必出现在 select 列表中 | Yes | |
| E121-03 | ORDER BY 子句中的值表达式 | Yes | |
| E121-04 | OPEN 语句 | No | |
| E121-06 | 定位 UPDATE 语句 | No | |
| E121-07 | 定位 DELETE 语句 | No | |
| E121-08 | CLOSE 语句 | No | |
| E121-10 | FETCH 语句:隐式 NEXT | No | |
| E121-17 | WITH HOLD 游标 | No | |
| E131 | 空值支持(以空值代替值) | Yes | |
| E141 | 基本完整性约束 | No | |
| E141-01 | NOT NULL 约束 | Yes | TiDB Cloud Lake 中的默认行为:所有列都允许为空。 |
| E141-02 | NOT NULL 列的 UNIQUE 约束 | No | |
| E141-03 | PRIMARY KEY 约束 | No | |
| E141-04 | 基本 FOREIGN KEY 约束,引用删除动作和引用修改动作的默认值均为 NO ACTION | No | |
| E141-06 | CHECK 约束 | No | |
| E141-07 | 列默认值 | Yes | |
| E141-08 | 在 PRIMARY KEY 上推导 NOT NULL | No | |
| E141-10 | 外键中的名称可以按任意顺序指定 | No | |
| E151 | 事务支持 | Partial | |
| E151-01 | COMMIT 语句 | Partial | TiDB Cloud Lake 仅支持对每条单独 DML 语句使用隐式事务。 |
| E151-02 | ROLLBACK 语句 | No | |
| E152 | 基本 SET TRANSACTION 语句 | No | |
| E152-01 | SET TRANSACTION 语句:ISOLATION LEVEL SERIALIZABLE 子句 | No | |
| E152-02 | SET TRANSACTION 语句:READ ONLY 和 READ WRITE 子句 | No | |
| E153 | 带子查询的可修改查询 | Yes | |
| E161 | 使用前导双减号的 SQL 注释 | Yes | |
| E171 | SQLSTATE 支持 | No | |
| E182 | 主机语言绑定 | No | |
| F031 | 基本模式操作 | Yes | |
| F031-01 | 用于创建持久基表的 CREATE TABLE 语句 | Yes | |
| F031-02 | CREATE VIEW 语句 | Yes | |
| F031-03 | GRANT 语句 | Partial | |
| F031-04 | ALTER TABLE 语句:ADD COLUMN 子句 | Yes | |
| F031-13 | DROP TABLE 语句:RESTRICT 子句 | Partial | |
| F031-16 | DROP VIEW 语句:RESTRICT 子句 | Partial | |
| F031-19 | REVOKE 语句:RESTRICT 子句 | Partial | |
| F041 | 基本连接表 | Yes | |
| F041-01 | 内连接(但不一定要求使用 INNER 关键字) | Yes | |
| F041-02 | INNER 关键字 | Yes | |
| F041-03 | LEFT OUTER JOIN | Yes | |
| F041-04 | RIGHT OUTER JOIN | Yes | |
| F041-05 | 外连接可以嵌套 | Yes | |
| F041-07 | 左外连接或右外连接中的内表也可以用于内连接 | Yes | |
| F041-08 | 支持所有比较运算符(而不仅仅是 =) | Yes | |
| F051 | 基本日期和时间 | Partial | |
| F051-01 | DATE 数据类型(包括支持 DATE 字面量) | Yes | |
| F051-02 | TIME 数据类型(包括支持 TIME 字面量),小数秒精度至少为 0 | No | |
| F051-03 | TIMESTAMP 数据类型(包括支持 TIMESTAMP 字面量),小数秒精度至少为 0 和 6 | Yes | |
| F051-04 | DATE、TIME 和 TIMESTAMP 数据类型上的比较谓词 | Yes | |
| F051-05 | datetime 类型与字符字符串类型之间的显式 CAST | Yes | |
| F051-06 | CURRENT_DATE | Yes | |
| F051-07 | LOCALTIME | Yes | |
| F051-08 | LOCALTIMESTAMP | Yes | |
| F081 | 视图中的 UNION 和 EXCEPT | Yes | |
| F131 | 分组操作 | Yes | |
| F131-01 | 在带分组视图的查询中支持 WHERE、GROUP BY 和 HAVING 子句 | Yes | |
| F131-02 | 在带分组视图的查询中支持多表 | Yes | |
| F131-03 | 在带分组视图的查询中支持集合函数 | Yes | |
| F131-04 | 带 GROUP BY 和 HAVING 子句以及分组视图的子查询 | Yes | |
| F131-05 | 带 GROUP BY 和 HAVING 子句以及分组视图的单行 SELECT | Yes | |
| F181 | 多模块支持 | No | |
| F201 | CAST 函数 | Yes | |
| F221 | 显式默认值 | No | |
| F261 | CASE 表达式 | Yes | |
| F261-01 | 简单 CASE | Yes | |
| F261-02 | 搜索式 CASE | Yes | |
| F261-03 | NULLIF | Yes | |
| F261-04 | COALESCE | Yes | |
| F311 | 模式定义语句 | Partial | |
| F311-01 | CREATE SCHEMA | Yes | |
| F311-02 | 用于持久基表的 CREATE TABLE | Yes | |
| F311-03 | CREATE VIEW | Yes | |
| F311-04 | CREATE VIEW:WITH CHECK OPTION | No | |
| F311-05 | GRANT 语句 | Partial | |
| F471 | 标量子查询值 | Yes | |
| F481 | 扩展的 NULL 谓词 | Yes | |
| F812 | 基本标记 | No | |
| S011 | 不同数据类型 | No | |
| T321 | 基本 SQL 调用例程 | No | |
| T321-01 | 无重载的用户定义函数 | Yes | |
| T321-02 | 无重载的用户定义存储过程 | No | |
| T321-03 | 函数调用 | Yes | |
| T321-04 | CALL 语句 | No | |
| T321-05 | RETURN 语句 | No | |
| T631 | 带单个列表元素的 IN 谓词 | Yes |