Skip to content

Commit

Permalink
Apply suggestions from code review
Browse files Browse the repository at this point in the history
Co-authored-by: Grace Cai <qqzczy@126.com>
  • Loading branch information
ekexium and qiancai authored Sep 7, 2022
1 parent 2e4e5af commit 55cb01f
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 7 deletions.
8 changes: 4 additions & 4 deletions constraints.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,9 +131,9 @@ COMMIT;
ERROR 1062 (23000): Duplicate entry 'bill' for key 'username'
```

在乐观事务的示例中,唯一约束的检查推迟到事务提交时才进行。由于 `bill` 值已经存在,这一行为导致了重复键错误。
在以上乐观事务的示例中,唯一约束的检查推迟到事务提交时才进行。由于 `bill` 值已经存在,这一行为导致了重复键错误。

你可通过设置 `tidb_constraint_check_in_place``1` 停用此行为(该变量设置对悲观事务无效,悲观事务通过 `tidb_constraint_check_in_place_pessimistic` 设置)。当 `tidb_constraint_check_in_place` 设置为 `1` 时,则会在执行语句时就对唯一约束进行检查。例如:
你可通过设置 [`tidb_constraint_check_in_place`](/system-variables.md#tidb_constraint_check_in_place)`1` 停用此行为(该变量仅适用于乐观事务,悲观事务需通过 `tidb_constraint_check_in_place_pessimistic` 设置)。当 `tidb_constraint_check_in_place` 设置为 `1` 时,TiDB 会在执行语句时就对唯一约束进行检查。例如:

```sql
DROP TABLE IF EXISTS users;
Expand Down Expand Up @@ -203,7 +203,7 @@ ERROR 1062 (23000): Duplicate entry 'bill' for key 'username'

悲观事务可以通过设置变量 [`tidb_constraint_check_in_place_pessimistic`](/system-variables.md#tidb_constraint_check_in_place_pessimistic)`OFF` 来推迟唯一约束的检查到下一次对该唯一索引项加锁时或事务提交时,同时也跳过这个悲观锁加锁,以获得更好的性能。此时需要注意:

1. 由于唯一性约束被推迟检查,读取时可能读到不满足唯一性约束的结果。如果读到这样的结果,该事务最后一定会回滚。
1. 由于唯一性约束被推迟检查,读取时可能读到不满足唯一性约束的结果,执行 `COMMIT` 语句时可能返回 `Duplicate entry` 错误。如果返回 `Duplicate entry` 错误,该事务最后一定会回滚。

下面这个例子跳过了对 bill 的加锁,因此可以读到不满足唯一性约束的结果:

Expand Down Expand Up @@ -239,7 +239,7 @@ COMMIT;
ERROR 1062 (23000): Duplicate entry 'bill' for key 'username'
```

2. 关闭该变量时,commit 语句可能会报出 `write conflict` 错误或 `duplicate entry` 错误,两种错误都意味着事务回滚。
2. 关闭该变量时,`COMMIT` 语句可能会返回 `Write conflict` 错误或 `Duplicate entry` 错误,两种错误都意味着事务回滚。

例如上面的例子,在提交时进行唯一约束检查,该事务报出了 `duplicate entry` 错误并回滚。

Expand Down
2 changes: 1 addition & 1 deletion error-codes.md
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ TiDB 兼容 MySQL 的错误码,在大多数情况下,返回和 MySQL 一样

* Error Number: 8147

在悲观事务中关闭 [`tidb_constraint_check_in_place_pessimistic`](/system-variables.md#tidb_constraint_check_in_place_pessimistic) 的情况下,语句执行报错,惰性唯一性检查可能无法顺利进行,abort 当前事务
[`tidb_constraint_check_in_place_pessimistic`](/system-variables.md#tidb_constraint_check_in_place_pessimistic) 设置为 0 时,悲观事务中的惰性唯一约束检查可能无法顺利进行,导致 SQL 语句执行报错并中止当前事务

* Error Number: 8200

Expand Down
4 changes: 2 additions & 2 deletions system-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -588,13 +588,13 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数
悲观事务模式中的行为由 `tidb_constraint_check_in_place_pessimistic` 单独控制。
### `tidb_constraint_check_in_place_pessimistic`
### `tidb_constraint_check_in_place_pessimistic` <span class="version-mark">从 v6.3.0 版本开始引入</span>
- 作用域:SESSION | GLOBAL
- 是否持久化到集群:是
- 默认值:`ON`
- 该变量仅适用于悲观事务模型。当这个变量设置为 `OFF` 时,唯一索引的重复值检查会被推迟到下一次需要对这个索引加锁的语句,或事务提交时才进行。这有助于提高性能,但对于某些应用,可能导致非预期的行为。详情见[约束](/constraints.md)。
- 关闭该变量会导致悲观事务中可能报出一个新的错误类型 `LazyUniquenessCheckFailure`,返回该错误时当前事务 abort,而像其他错误的仅仅回滚报错的语句。
- 关闭该变量可能会导致悲观事务中返回 `LazyUniquenessCheckFailure` 报错,返回该错误时当前事务 abort,而像其他错误的仅仅回滚报错的语句。
- 关闭该变量时,commit 语句可能会报出 `write conflict` 错误或 `duplicate entry` 错误,两种错误都意味着事务回滚。
- 悲观事务模型下将 `tidb_constraint_check_in_place_pessimistic` 设置为 0
Expand Down

0 comments on commit 55cb01f

Please sign in to comment.