自增列模式(def_identity_mode)
📄字数 962
👁️阅读量 加载中...
引入版本
v12.0.6
功能描述
用于控制自增列(identity)的插入值填充模式,以兼容MySQL的自增列处理方式。它是连接会话参数 IDENTITY_MODE 的默认值。
参数属性
| 属性 | 属性值 |
|---|---|
| 参数类型 | INTEGER |
| 默认值 | 0 |
| 取值范围 | {0,1,2} |
| 影响范围 | 系统级 |
| 修改方式 | 在线修改,立即生效 |
使用场景说明
- 该参数控制表对象的自增列进行 INSERT 操作插入空值时的默认处理模式,若连接显式指定了 IDENTITY_MODE 会话参数,则优先使用会话参数指定的兼容模式。
| def_identity_mode | IDENTITY_MODE | 作用及影响 |
|---|---|---|
| 0 | DEFAULT DEFAULT_IDENTITY_MODE | 自增字段显式插入空值上报 E16005 异常。 |
| 1 | NULL_AS_AUTO_INCREMENT | 自增字段显式插入空值时使用自增值替换。 |
| 2 | ZERO_AS_AUTO_INCREMENT | 自增字段显式插入空值或 0 时使用自增值替换。 |
提示
- 在线修改 def_identity_mode 不影响已存在的连接,影响后续的新建连接。
示例
sql
-- 在线设置 def_identity_mode
SQL> SET def_identity_mode TO 0;
-- 在线查看 def_identity_mode
SQL> SHOW def_identity_mode
/*
* 场景一:
* 1. def_identity_mode = 0;
* 2. SYSDBA 身份;
*/
SQL> CREATE TABLE t1(c1 INTEGER IDENTITY(1, 1));
SQL> INSERT INTO t1 VALUES(NULL); /* 上报异常 E16005 字段C1不能取空值 */
/*
* 场景二:
* 1. def_identity_mode = 1;
* 2. SYSDBA 身份;
*/
SQL> CREATE TABLE t1(c1 INTEGER IDENTITY(1, 1));
SQL> INSERT INTO t1 VALUES(NULL); /* 执行成功 */
SQL> INSERT INTO t1 VALUES(0); /* 执行成功 */
SQL> SELECT * FROM t1;
/*
* 返回结果集:
* +----+
* | C1 |
* +----+
* | 1 |
* | 0 |
* +----+
*/
/*
* 场景三:
* 1. def_identity_mode = 2;
* 2. SYSDBA 身份;
*/
SQL> CREATE TABLE t1(c1 INTEGER IDENTITY(1, 1));
SQL> INSERT INTO t1 VALUES(NULL); /* 执行成功 */
SQL> INSERT INTO t1 VALUES(0); /* 执行成功 */
SQL> SELECT * FROM t1;
/*
* 返回结果集:
* +----+
* | C1 |
* +----+
* | 1 |
* | 2 |
* +----+
*/