SQL 语句是 SQL(结构化查询语言)中由标识符、参数、变量、数据类型和保留的 SQL 关键字组成的命令或指令。它指示数据库执行特定操作,如检索、修改或管理数据和数据库结构。TiDB 使用的 SQL 语句旨在遵循 ISO/IEC SQL 标准,必要时为 MySQL 和 TiDB 特定语句提供扩展。
SQL 根据其功能分为以下 4 种类型:
- DDL(数据定义语言):用于定义数据库对象,包括数据库、表、视图和索引。
- DML(数据操作语言):用于操作应用程序相关的记录。
- DQL(数据查询语言):用于在条件过滤后查询记录。
- DCL(数据控制语言):用于定义访问权限和安全级别。
SQL 模式定义了 TiDB 支持的 SQL 语法以及要执行的数据验证检查类型。更多信息,请参见 SQL 模式。 TiDB 提供三个 SQL 属性来优化行 ID 生成和数据分布。
AUTO_INCREMENT 是一个列属性,用于自动填充默认列值。当 INSERT 语句没有为 AUTO_INCREMENT 列指定值时,系统会自动为该列分配值。
出于性能考虑,AUTO_INCREMENT 数值会批量分配(默认为 3 万个)给每个 TiDB 服务器。这意味着虽然 AUTO_INCREMENT 数值保证是唯一的,但分配给 INSERT 语句的值只在每个 TiDB 服务器基础上是单调递增的。
AUTO_RANDOM 是一个列属性,用于自动为 BIGINT 列分配值。自动分配的值是随机且唯一的。
由于 AUTO_RANDOM 的值是随机且唯一的,AUTO_RANDOM 经常用来代替 AUTO_INCREMENT,以避免因 TiDB 分配连续 ID 而导致单个存储节点出现写入热点。如果当前的 AUTO_INCREMENT 列是主键且类型为 BIGINT,您可以执行 ALTER TABLE t MODIFY COLUMN id BIGINT AUTO_RANDOM(5); 语句将其从 AUTO_INCREMENT 切换为 AUTO_RANDOM。
对于没有聚簇主键或没有主键的表,TiDB 使用隐式自增行 ID。当执行大量 INSERT 操作时,数据会写入单个分片,导致写入热点。
关键字是在 SQL 语句中具有特殊含义的词,如 SELECT、UPDATE 和 DELETE。
- 其中一些可以直接用作标识符,这些被称为非保留关键字。
- 有些在用作标识符之前需要特殊处理,这些被称为保留关键字。
然而,一些非保留关键字可能仍需要特殊处理。建议您将它们视为保留关键字。更多信息,请参见关键字。 TiDB 允许您设置和读取用户定义变量。用户定义变量的格式是 @var_name。组成 var_name 的字符可以是任何可以组成标识符的字符,包括数字 0-9、字母 a-z 和 A-Z、下划线 _、美元符号 $ 和 UTF-8 字符。此外,还包括英文句点 .。用户定义变量不区分大小写。
用户定义变量是会话特定的,这意味着一个客户端连接定义的用户变量不能被其他客户端连接看到或使用。更多信息,请参见用户定义变量。 在 TiDB 中,元数据锁是一种用于在线架构变更期间管理表元数据变更的机制。当事务开始时,它会锁定当前元数据的快照。如果在事务期间元数据发生变化,TiDB 会抛出 "Information schema is changed" 错误,防止事务提交。元数据锁通过优先处理 DML 来协调数据操作语言(DML)和数据定义语言(DDL)操作,确保使用过时元数据的进行中 DML 事务在应用新的 DDL 更改之前提交,从而最小化错误并维护数据一致性。更多信息,请参见元数据锁。 该文档部分内容附带平凯云平台链接,以下简称为外链。若遇到以下分类对应的外链时,请参考以下说明。现将外链文档划分为不同类型,并明确各类文档可作为参考依据的范围: