唯一值检测方式(check_unique_mode)
📄字数 1.1K
👁️阅读量 加载中...
引入版本
v11.0.0
功能描述
唯一值检测方式。
参数属性
| 属性 | 属性值 |
|---|---|
| 参数类型 | INTEGER |
| 默认值 | 2 |
| 取值范围 | [1, 2] |
| 影响范围 | 系统级 |
| 修改方式 | 在线修改,立即生效 |
使用场景说明
- 该参数控制系统进行唯一值检测的方式。
| check_unique_mode | 作用及影响 |
|---|---|
| 1 | 系统进行 INSERT 或 UPDATE 时,不进行唯一值约束预检测,待操作执行结束后再进行 唯一值约束检测,检测不通过则上报 E13001 异常。 |
| 2 | 系统进行 INSERT 或 UPDATE 时,进行唯一值约束预检测。 |
- check_unique_mode 与 delay_check_unique 共同控制系统进行唯一值检测的行为,它们的控制矩阵图如下:
| - | check_unique_mode = 1 | check_unique_mode = 2 |
|---|---|---|
| delay_check_unique = true | UPDATE 场景延迟检测,INSERT 场景不进行预检测。 | UPDATE 场景延迟检测,INSERT 场景进行预检测。 |
| delay_check_unique = false | INSERT 和 UPDATE 场景不进行预检测。 | INSERT 和 UPDATE 场景均进行预检测。 |
注意
- 使用 REPLACE INTO 功能时,check_unique_mode 只能设置为 2。
示例
sql
-- 在线修改 check_unique_mode
SQL> SET check_unique_mode TO 2;
-- 在线查看 check_unique_mode
SQL> SHOW check_unique_mode;
/*
* 场景一:
* 1. delay_check_unique = false;
* 2. check_unique_mode = 1;
* 3. auto_commit = true;
*/
SQL> CREATE TABLE t1(c1 INTEGER);
SQL> CREATE UNIQUE INDEX idx ON t1(c1);
SQL> INSERT INTO t1 VALUES(1)(2);
SQL> INSERT INTO t1 VALUES(1); -- 插入数据后,维护索引时报 E13001 违反唯一值约束;
/*
* 场景二:
* 1. delay_check_unique = false;
* 2. check_unique_mode = 2;
* 3. auto_commit = true;
*/
SQL> CREATE TABLE t1(c1 INTEGER);
SQL> CREATE UNIQUE INDEX idx ON t1(c1);
SQL> INSERT INTO t1 VALUES(1)(2);
SQL> INSERT INTO t1 VALUES(1); -- 插入数据前进行预检测,报 E13001 违反唯一值约束;