Skip to content

Commit edacd7c

Browse files
authored
sql: refine term for AUTO_INCREMENT (#20160)
1 parent 30c9ab9 commit edacd7c

8 files changed

+16
-16
lines changed

auto-increment.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ aliases: ['/docs-cn/dev/auto-increment/']
2222

2323
> **注意:**
2424
>
25-
> 如果要求自增编号在所有 TiDB 实例上具有单调性,并且你的 TiDB 版本在 v6.5.0 及以上,推荐使用 [MySQL 兼容模式](#mysql-兼容模式)
25+
> 如果要求自增编号在所有 TiDB 实例上具有单调性,并且你的 TiDB 版本在 v6.5.0 及以上,推荐使用[兼容 MySQL 的自增列模式](#兼容-mysql-的自增列模式)
2626
2727
{{< copyable "sql" >}}
2828

@@ -389,7 +389,7 @@ SELECT * FROM t;
389389
390390
从 v3.0.9 和 v4.0.rc-1 开始,和 MySQL 的行为类似,自增列隐式分配的值遵循 session 变量 `@@auto_increment_increment` 和 `@@auto_increment_offset` 的控制,其中自增列隐式分配的值 (ID) 将满足式子 `(ID - auto_increment_offset) % auto_increment_increment == 0`。
391391
392-
## MySQL 兼容模式
392+
## 兼容 MySQL 的自增列模式
393393
394394
TiDB 提供了一种兼容 MySQL 的自增列模式,该模式能确保 ID 严格递增且间隙最小。要启用此模式,需在建表时将 `AUTO_ID_CACHE` 设置为 `1`:
395395
@@ -422,7 +422,7 @@ INSERT INTO t VALUES (); -- Returns ID 30001
422422
423423
- 主实例退出或崩溃的故障恢复期间
424424
425-
使用 MySQL 兼容模式后,能保证 ID **唯一**、**单调递增**,行为几乎跟 MySQL 完全一致。即使跨 TiDB 实例访问,ID 也不会出现回退。只有在中心化分配自增 ID 服务的“主” TiDB 实例进程退出(如该 TiDB 节点重启)或者异常崩溃时,才有可能造成部分 ID 不连续。这是因为主备切换时,“备” 节点需要丢弃一部分之前的“主” 节点已经分配的 ID,以保证 ID 不出现重复。
425+
使用兼容 MySQL 的自增列模式后,能保证 ID **唯一**、**单调递增**,行为几乎跟 MySQL 完全一致。即使跨 TiDB 实例访问,ID 也不会出现回退。只有在中心化分配自增 ID 服务的“主” TiDB 实例进程退出(如该 TiDB 节点重启)或者异常崩溃时,才有可能造成部分 ID 不连续。这是因为主备切换时,“备” 节点需要丢弃一部分之前的“主” 节点已经分配的 ID,以保证 ID 不出现重复。
426426
427427
- TiDB 节点滚动升级期间
428428
- 正常并发事务场景(与 MySQL 类似)

basic-features.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0
275275

276276
[^3]: TiDB 支持的完整 SQL 列表,见[语句参考](/sql-statements/sql-statement-select.md)
277277

278-
[^4]: 从 [TiDB v6.4.0](/releases/release-6.4.0.md) 开始,支持[高性能、全局单调递增的 `AUTO_INCREMENT`](/auto-increment.md#mysql-兼容模式)
278+
[^4]: 从 [TiDB v6.4.0](/releases/release-6.4.0.md) 开始,支持[高性能、全局单调递增的 `AUTO_INCREMENT`](/auto-increment.md#兼容-mysql-的自增列模式)
279279

280280
[^5]: 从 [TiDB v7.0.0](/releases/release-7.0.0.md) 开始新增的参数 `FIELDS DEFINED NULL BY` 以及新增支持从 S3 和 GCS 导入数据,均为实验特性。从 [TiDB v7.6.0](/releases/release-7.6.0.md) 开始 `LOAD DATA` 的事务行为与 MySQL 的事务行为一致,包括事务内的 `LOAD DATA` 语句本身不再自动提交当前事务,也不会开启新事务,并且事务内的 `LOAD DATA` 语句可以被显式提交或者回滚。此外,`LOAD DATA` 语句会受 TiDB 事务模式设置(乐观/悲观)影响。
281281

dm/dm-best-practices.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ DM 的性能参数如下表所示。
4444

4545
TiDB 的 `AUTO_INCREMENT` 与 MySQL 的 `AUTO_INCREMENT` 整体上看是相互兼容的。但因为 TiDB 作为分布式数据库,一般会有多个计算节点(client 端入口),应用数据写入时会将负载均分开,这就导致在有 `AUTO_INCREMENT` 列的表上,可能出现不连续的自增 ID。详细原理参考 [`AUTO_INCREMENT`](/auto-increment.md#实现原理)
4646

47-
如果业务对自增 ID 有强依赖,可以考虑使用 [`AUTO_INCREMENT`MySQL 兼容模式](/auto-increment.md#mysql-兼容模式)[`SEQUENCE` 函数](/sql-statements/sql-statement-create-sequence.md#sequence-函数)
47+
如果业务对自增 ID 有强依赖,可以考虑使用[兼容 MySQL 的自增列模式](/auto-increment.md#兼容-mysql-的自增列模式)[`SEQUENCE` 函数](/sql-statements/sql-statement-create-sequence.md#sequence-函数)
4848

4949
#### 是否使用聚簇索引
5050

functions-and-operators/information-functions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ TABLE t1;
193193

194194
> **注意**
195195
>
196-
> - 在 TiDB 中,[`AUTO_ID_CACHE`](/auto-increment.md#auto_id_cache) 可能会导致该函数的返回结果与 MySQL 不同。这是因为 TiDB 在每个节点上都会各自缓存 ID,这可能导致分配的 ID 出现无序或间隔。如果你的应用程序依赖于严格的 ID 顺序,可以启用 [MySQL 兼容模式](/auto-increment.md#mysql-兼容模式)
196+
> - 在 TiDB 中,[`AUTO_ID_CACHE`](/auto-increment.md#auto_id_cache) 可能会导致该函数的返回结果与 MySQL 不同。这是因为 TiDB 在每个节点上都会各自缓存 ID,这可能导致分配的 ID 出现无序或间隔。如果你的应用程序依赖于严格的 ID 顺序,可以启用[兼容 MySQL 的自增列模式](/auto-increment.md#兼容-mysql-的自增列模式)
197197
>
198198
> - 在以上示例中,ID 是以 2 递增的,而 MySQL 在相同场景中生成的 ID 是以 1 递增的。关于兼容性的更多信息,请参见[自增 ID](/mysql-compatibility.md#自增-id)
199199

mysql-compatibility.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ TiDB 高度兼容 MySQL 协议,以及 MySQL 5.7 和 MySQL 8.0 常用的功能
5454

5555
### 自增 ID
5656

57-
- TiDB 的自增列既能保证唯一,也能保证在单个 TiDB server 中自增,使用 [`AUTO_INCREMENT` MySQL 兼容模式](/auto-increment.md#mysql-兼容模式)能保证多个 TiDB server 中自增 ID,但不保证自动分配的值的连续性。建议避免将缺省值和自定义值混用,以免出现 `Duplicated Error` 的错误。
57+
- TiDB 的自增列既能保证唯一,也能保证在单个 TiDB server 中自增,使用 [`AUTO_INCREMENT` 兼容 MySQL 的自增列模式](/auto-increment.md#兼容-mysql-的自增列模式)能保证多个 TiDB server 中自增 ID,但不保证自动分配的值的连续性。建议避免将缺省值和自定义值混用,以免出现 `Duplicated Error` 的错误。
5858

5959
- TiDB 可通过 `tidb_allow_remove_auto_inc` 系统变量开启或者关闭允许移除列的 `AUTO_INCREMENT` 属性。删除列属性的语法是:`ALTER TABLE MODIFY``ALTER TABLE CHANGE`
6060

@@ -92,7 +92,7 @@ mysql> SELECT _tidb_rowid, id FROM t;
9292
3 rows in set (0.01 sec)
9393
```
9494

95-
可以看到,由于共用分配器,id 每次自增步长是 2。在 [MySQL 兼容模式](/auto-increment.md#mysql-兼容模式)中改掉了该行为,没有共用分配器,因此不会跳号。
95+
可以看到,由于共用分配器,id 每次自增步长是 2。在[兼容 MySQL 的自增列模式](/auto-increment.md#兼容-mysql-的自增列模式)中改掉了该行为,没有共用分配器,因此不会跳号。
9696

9797
> **注意:**
9898
>

releases/release-6.4.0.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ TiDB 版本:6.4.0-DMR
1717

1818
在 6.4.0-DMR 版本中,你可以获得以下关键特性:
1919

20-
- 支持通过 [`FLASHBACK CLUSTER TO TIMESTAMP`](/sql-statements/sql-statement-flashback-cluster.md) 命令将集群快速回退到特定的时间点 (实验特性)。
20+
- 支持通过 [`FLASHBACK CLUSTER TO TIMESTAMP`](/sql-statements/sql-statement-flashback-cluster.md) 命令将集群快速回退到特定的时间点实验特性)。
2121
- 支持对 TiDB 实例的[全局内存使用进行追踪](/configure-memory-usage.md)(实验特性)。
2222
- TiDB 分区表[兼容 LINEAR HASH 分区语法](/partitioned-table.md#tidb-对-linear-hash-分区的处理)
23-
- 支持高性能、全局单调递增的 [`AUTO_INCREMENT`](/auto-increment.md#mysql-兼容模式) 列属性(实验特性)。
23+
- 支持高性能、全局单调递增的 [`AUTO_INCREMENT`](/auto-increment.md#兼容-mysql-的自增列模式) 列属性(实验特性)。
2424
- 支持对 [JSON 类型](/data-type-json.md)中的 Array 数据做范围选择。
2525
- 实现磁盘故障、I/O 无响应等极端情况下的故障恢复加速。
2626
- 新增[动态规划算法](/join-reorder.md#join-reorder-动态规划算法实例)来决定表的连接顺序。
@@ -177,13 +177,13 @@ TiDB 版本:6.4.0-DMR
177177

178178
* 支持高性能、全局单调递增的 `AUTO_INCREMENT` 列属性(实验特性)[#38442](https://github.com/pingcap/tidb/issues/38442) @[tiancaiamao](https://github.com/tiancaiamao)
179179

180-
TiDB v6.4.0 引入了 `AUTO_INCREMENT` MySQL 兼容模式,通过中心化分配自增 ID,实现了自增 ID 在所有 TiDB 实例上单调递增。使用该特性能够更容易地实现查询结果按自增 ID 排序。要使用 MySQL 兼容模式,你需要在建表时将 `AUTO_ID_CACHE` 设置为 `1`
180+
TiDB v6.4.0 引入了 `AUTO_INCREMENT` 的兼容 MySQL 的自增列模式,通过中心化分配自增 ID,实现了自增 ID 在所有 TiDB 实例上单调递增。使用该特性能够更容易地实现查询结果按自增 ID 排序。要使用兼容 MySQL 的自增列模式,你需要在建表时将 `AUTO_ID_CACHE` 设置为 `1`
181181

182182
```sql
183183
CREATE TABLE t(a int AUTO_INCREMENT key) AUTO_ID_CACHE 1;
184184
```
185185

186-
更多信息,请参考[用户文档](/auto-increment.md#mysql-兼容模式)。
186+
更多信息,请参考[用户文档](/auto-increment.md#兼容-mysql-的自增列模式)。
187187

188188
* 支持对 JSON 类型中的 Array 数据做范围选择 [#13644](https://github.com/tikv/tikv/issues/13644) @[YangKeao](https://github.com/YangKeao)
189189

releases/release-6.5.0.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ TiDB 6.5.0 为长期支持版本 (Long-Term Support Release, LTS)。
2424
2525
- [添加索引加速](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入)特性 GA,添加索引的性能约提升为 v6.1.0 的 10 倍。
2626
- TiDB 全局内存控制特性 GA,通过 [`tidb_server_memory_limit`](/system-variables.md#tidb_server_memory_limit-从-v640-版本开始引入) 即可管理全局内存阈值。
27-
- 支持高性能、全局单调递增的 [`AUTO_INCREMENT` 列属性](/auto-increment.md#mysql-兼容模式) GA,兼容 MySQL。
27+
- 支持高性能、全局单调递增的 [`AUTO_INCREMENT` 列属性](/auto-increment.md#兼容-mysql-的自增列模式) GA,兼容 MySQL。
2828
- [`FLASHBACK CLUSTER TO TIMESTAMP`](/sql-statements/sql-statement-flashback-cluster.md) 特性新增对 TiCDC 和 PITR 的兼容性支持,该特性已 GA。
2929
- 优化器引入的更精准的代价模型 [Cost Model Version 2](/cost-model.md#cost-model-version-2) GA,同时优化器增强索引合并 [INDEX MERGE](/glossary.md#index-merge) 功能对 `AND` 连接的表达式的支持。
3030
- 支持下推 `JSON_EXTRACT()` 函数至 TiFlash。
@@ -219,13 +219,13 @@ TiDB 6.5.0 为长期支持版本 (Long-Term Support Release, LTS)。
219219

220220
* 支持高性能、全局单调递增的 `AUTO_INCREMENT` 列属性 (GA) [#38442](https://github.com/pingcap/tidb/issues/38442) @[tiancaiamao](https://github.com/tiancaiamao)
221221

222-
TiDB v6.4.0 引入了 `AUTO_INCREMENT` MySQL 兼容模式作为实验特性,通过中心化分配自增 ID,实现了自增 ID 在所有 TiDB 实例上单调递增。使用该特性能够更容易地实现查询结果按自增 ID 排序。该功能在 v6.5.0 正式 GA。使用该功能的单表写入 TPS 预期超过 2 万,并支持通过弹性扩容提升单表和整个集群的写入吞吐。要使用 MySQL 兼容模式,你需要在建表时将 `AUTO_ID_CACHE` 设置为 `1`
222+
TiDB v6.4.0 引入了 `AUTO_INCREMENT` 的兼容 MySQL 的自增列模式作为实验特性,通过中心化分配自增 ID,实现了自增 ID 在所有 TiDB 实例上单调递增。使用该特性能够更容易地实现查询结果按自增 ID 排序。该功能在 v6.5.0 正式 GA。使用该功能的单表写入 TPS 预期超过 2 万,并支持通过弹性扩容提升单表和整个集群的写入吞吐。要使用兼容 MySQL 的自增列模式,你需要在建表时将 `AUTO_ID_CACHE` 设置为 `1`
223223

224224
```sql
225225
CREATE TABLE t(a int AUTO_INCREMENT key) AUTO_ID_CACHE 1;
226226
```
227227

228-
更多信息,请参考[用户文档](/auto-increment.md#mysql-兼容模式)。
228+
更多信息,请参考[用户文档](/auto-increment.md#兼容-mysql-的自增列模式)。
229229

230230
### 数据迁移
231231

releases/release-8.1.0.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ TiDB 8.1.0 为长期支持版本 (Long-Term Support Release, LTS)。
166166
### 行为变更
167167

168168
* 在之前的版本中,TiDB Lightning 的配置项 `tidb.tls` 在取值为 `"false"``""` 时的行为是相同的,在取值为 `"skip-verify"``"preferred"` 时的行为也是相同的。从 v8.1.0 开始,TiDB Lightning 对 `tidb.tls` 取值为 `"false"``""``"skip-verify"``"preferred"` 时的行为进行了区分。更多信息,请参考 [TiDB Lightning 配置参数](/tidb-lightning/tidb-lightning-configuration.md)
169-
* 对于设置了 `AUTO_ID_CACHE=1` 的表,TiDB 支持[中心化分配自增 ID 服务](/auto-increment.md#mysql-兼容模式)。在之前的版本中,该服务的“主”TiDB 节点在进程退出(如该 TiDB 节点重启)时会自动执行 `forceRebase` 操作,以确保自动分配的 ID 尽可能连续。然而,当设置过 `AUTO_ID_CACHE=1` 的表过多时,执行 `forceRebase` 会非常耗时,导致 TiDB 无法及时重启,甚至阻塞数据写入,影响系统可用性。因此,从 v8.1.0 起,TiDB 取消了 `forceRebase` 操作,解决了上述问题,但会造成主备切换期间部分自动分配的 ID 出现不连续。
169+
* 对于设置了 `AUTO_ID_CACHE=1` 的表,TiDB 支持[中心化分配自增 ID 服务](/auto-increment.md#兼容-mysql-的自增列模式)。在之前的版本中,该服务的“主”TiDB 节点在进程退出(如该 TiDB 节点重启)时会自动执行 `forceRebase` 操作,以确保自动分配的 ID 尽可能连续。然而,当设置过 `AUTO_ID_CACHE=1` 的表过多时,执行 `forceRebase` 会非常耗时,导致 TiDB 无法及时重启,甚至阻塞数据写入,影响系统可用性。因此,从 v8.1.0 起,TiDB 取消了 `forceRebase` 操作,解决了上述问题,但会造成主备切换期间部分自动分配的 ID 出现不连续。
170170
* 在之前的版本中,TiCDC 在处理包含 `UPDATE` 变更的事务时,如果事件的主键或者非空唯一索引的列值发生改变,则会将该条事件拆分为 `DELETE``INSERT` 两条事件。在 v8.1.0 中,当使用 MySQL Sink 时,如果 `UPDATE` 变更所在事务的 `commitTS` 小于 TiCDC 启动时从 PD 获取的当前时间戳 `thresholdTs`,TiCDC 就会将该 `UPDATE` 事件拆分为 `DELETE``INSERT` 两条事件,然后写入 Sorter 模块。该行为变更解决了由于 TiCDC 接收到的 `UPDATE` 事件顺序可能不正确,导致拆分后的 `DELETE``INSERT` 事件顺序也可能不正确,从而引发下游数据不一致的问题。更多信息,请参考[用户文档](/ticdc/ticdc-split-update-behavior.md#mysql-sink-拆分-update-事件行为说明)
171171

172172
### 系统变量

0 commit comments

Comments
 (0)