自增列填充模式(IDENTITY_MODE)
📄字数 1.3K
👁️阅读量 加载中...
引入版本
v12.0.6
功能描述
IDENTITY_MODE
用于控制客户端连接会话上自增列插入值填充模式,以兼容MySQL。
参数属性
属性 | 属性值 |
---|---|
参数类型 | VARCHAR |
默认值 | DEFAULT |
取值范围 | {DEFAULT, DEFAULT_IDENTITY_MODE, NULL_AS_AUTO_INCREMENT, ZERO_AS_AUTO_INCREMENT} |
影响范围 | 会话级 |
修改方式 | 在线修改,立即生效 |
使用场景说明
- IDENTITY_MODE 的作用及影响。
def_identity_mode | IDENTITY_MODE | 作用及影响 |
---|---|---|
0 | DEFAULT DEFAULT_IDENTITY_MODE | 自增字段显式插入空值上报 E16005 异常。 |
1 | NULL_AS_AUTO_INCREMENT | 自增字段显式插入空值时使用自增值替换。 |
2 | ZERO_AS_AUTO_INCREMENT | 自增字段显式插入空值或 0 时使用自增值替换。 |
- 若连接会话未显式指定 IDENTITY_MODE,则使用系统参数 def_identity_mode 。
示例
- 查询自增列插入值填充模式。
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)