Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sql: add switch for check constraint #14320

Merged
merged 7 commits into from
Jun 28, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions constraints.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ Query OK, 1 row affected (0.03 sec)

## `CHECK` 约束

> **注意:**
>
> `CHECK` 约束功能默认关闭,需要将变量 [`tidb_enable_check_constraint`](/system-variables.md#tidb_enable_check_constraint-从-v720-版本开始引入) 设置为 `ON` 后才能开启。

`CHECK` 约束用于限制表中某个字段的值必须满足指定条件。当为表添加 `CHECK` 约束后,在插入或者更新表的数据时,TiDB 会检查约束条件是否满足,如果不满足,则会报错。

TiDB 中 `CHECK` 约束的语法如下,与 MySQL 中一致:
Expand Down Expand Up @@ -128,6 +132,11 @@ ALTER TABLE t DROP CONSTRAINT t_chk_1;
ALTER TABLE t ALTER CONSTRAINT c1 NOT ENFORCED;
```

### 与 MySQL 的兼容性

- 不支持在添加列的同时添加 `CHECK` 约束(例如,`ALTER TABLE t ADD COLUMN a CHECK(a > 0)`)),否则只有列会被添加成功,TiDB 会忽略 `CHECK` 约束但不会报错。
- 不支持使用 `ALTER TABLE t CHANGE a b int CHECK(b > 0)` 添加 `CHECK` 约束,使用该语句时 TiDB 会报错。

## 唯一约束

唯一约束是指唯一索引和主键列中所有的非空值都是唯一的。
Expand Down
8 changes: 8 additions & 0 deletions system-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -1450,6 +1450,14 @@ mysql> SELECT job_info FROM mysql.analyze_jobs ORDER BY end_time DESC LIMIT 1;
- 默认值:`OFF`
- 这个变量用于控制是否开启 cascades planner。

### `tidb_enable_check_constraint` <span class="version-mark">从 v7.2.0 版本开始引入</span>

- 作用域:GLOBAL
- 是否持久化到集群:是
- 类型:布尔型
- 默认值:`OFF`
- 这个变量用于控制是否启用 [`CHECK` 约束](/constraints.md#check-约束)。

### `tidb_enable_chunk_rpc` <span class="version-mark">从 v4.0 版本开始引入</span>

- 作用域:SESSION
Expand Down