Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


自增列填充模式(IDENTITY_MODE)

📄字数 1.3K
👁️阅读量 加载中...

引入版本

v12.0.6

功能描述

IDENTITY_MODE 用于控制客户端连接会话上自增列插入值填充模式,以兼容MySQL。

参数属性

属性属性值
参数类型VARCHAR
默认值DEFAULT
取值范围{DEFAULT, DEFAULT_IDENTITY_MODE, NULL_AS_AUTO_INCREMENT, ZERO_AS_AUTO_INCREMENT}
影响范围会话级
修改方式在线修改,立即生效

使用场景说明

  1. IDENTITY_MODE 的作用及影响。
def_identity_modeIDENTITY_MODE作用及影响
0DEFAULT
DEFAULT_IDENTITY_MODE
自增字段显式插入空值上报 E16005 异常。
1NULL_AS_AUTO_INCREMENT自增字段显式插入空值时使用自增值替换。
2ZERO_AS_AUTO_INCREMENT自增字段显式插入空值或 0 时使用自增值替换。
  1. 若连接会话未显式指定 IDENTITY_MODE,则使用系统参数 def_identity_mode

示例

  1. 查询自增列插入值填充模式。
sql
SQL> SHOW IDENTITY_MODE

+---------------+
| IDENTITY_MODE |
+---------------+
| DEFAULT       |
+---------------+

2.设置当前会话上自动列插入值填充模式为ZERO_AS_AUTO_INCREMENT。

sql
SQL> SET IDENTITY_MODE TO ZERO_AS_AUTO_INCREMENT;
-- 或
SQL> ALTER SESSION SET IDENTITY_MODE = ZERO_AS_AUTO_INCREMENT;

3.设置为NULL_AS_AUTO_INCREMENT或ZERO_AS_AUTO_INCREMENT,插入数据。

sql
-- 设置为 NULL_AS_AUTO_INCREMENT
SQL> SET IDENTITY_MODE TO NULL_AS_AUTO_INCREMENT;
SQL> CREATE TABLE tab_iden(id INT NOT NULL, c1 INT IDENTITY(1,1));
-- 不显式指定自增序列的值,插入自增值。
SQL> insert into tab_iden(id) values(1);
-- 显式指定default,插入自增值
SQL> insert into tab_iden values(2,default);
-- 显式指定自增值为NULL,插入自增值
SQL> insert into tab_iden values(3,NULL);
-- 显式指定自增值为0,按数值插入
SQL> insert into tab_iden values(4,0);
-- 自增列的值具有唯一值约束,多次插入相同值,则报错,违反唯一值约束
SQL> insert into tab_iden values(5,0);

Error: [E13001] 违反唯一值约束

SQL> select * from tab_iden;

+----+----+
| ID | C1 |
+----+----+
| 1  | 1  |
| 2  | 2  |
| 3  | 3  |
| 4  | 0  |
+----+----+

(4 rows)
Use time:0 ms.
-- 设置为 ZERO_AS_AUTO_INCREMENT
SQL> SET IDENTITY_MODE TO ZERO_AS_AUTO_INCREMENT;
SQL> insert into tab_iden values(5,0);
SQL> insert into tab_iden values(6,NULL);

Total 1 records effected.
Use time:0 ms.

SQL> select * from tab_iden;

+----+----+
| ID | C1 |
+----+----+
| 1  | 1  |
| 2  | 2  |
| 3  | 3  |
| 4  | 0  |
| 5  | 4  |
| 6  | 5  |
+----+----+

(6 rows)