拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

达梦数据库-学习-70-IDENTITY转AUTO_INCREMENT

达梦数据库-学习-70-IDENTITY转AUTO_INCREMENT

目录

一、环境信息

二、背景描述

三、操作步骤

1、生成数据

2、修改列属性

3、删除列属性

4、加列属性

5、查询表数据

6、全表插入数据

7、单列插入数据

8、查验数据


一、环境信息

名称值
CPUX86
操作系统CentOS Linux release 8.5.2111
内存4G
逻辑核数5
DM版本9.1.0.26

二、背景描述

应用报错:仅当指定列列表,且SET IDENTITY_INSERT为ON时,才能对自增列赋值。

IDENTITY自增属性,在插入数据时,需执行SET IDENTITY_INSERT 模式名.表名 ON,插入结束后,需执行SET IDENTITY_INSERT 模式名.表名 OFF。

但开发老师觉得这需要修改嵌入在应用中的代码,推荐将IDENTITY转AUTO_INCREMENT,因为AUTO_INCREMENT执行插入语句时,无需执行额外语句,但需添加唯一约束。

三、操作步骤

1、生成数据

DROP TABLE IF EXISTS SUN; CREATE TABLE SUN (A INT IDENTITY(1,1), B INT); INSERT INTO SUN(B) SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 10; COMMIT;

2、修改列属性

SQL> ALTER TABLE SUN MODIFY A INT AUTO_INCREMENT; ALTER TABLE SUN MODIFY A INT AUTO_INCREMENT; 第1 行附近出现错误[-2654]:表[SUN]已含有IDENTITY列. 已用时间: 2.798(毫秒). 执行号:0.

3、删除列属性

SQL> ALTER TABLE SUN DROP IDENTITY; 操作已执行 已用时间: 16.888(毫秒). 执行号:606.

4、加列属性

SQL> ALTER TABLE SUN ADD COLUMN A AUTO_INCREMENT ; ALTER TABLE SUN ADD COLUMN A AUTO_INCREMENT ; 第1 行附近出现错误[-2071]:AUTO_INCREMENT列必须为唯一性约束的一部分. 已用时间: 2.305(毫秒). 执行号:0.

因为AUTO_INCREMENT属性必须和唯一约束组合使用,所以在加AUTO_INCREMENT之前需加唯一约束。

SQL> ALTER TABLE SUN ADD CONSTRAINT UnqConsSun UNIQUE(A); 操作已执行 已用时间: 22.010(毫秒). 执行号:607. 或 ALTER TABLE SUN ADD CONSTRAINT PRIMARY KEY (A);

当然加主键也是一样的。

SQL> ALTER TABLE SUN ADD COLUMN A AUTO_INCREMENT ; 操作已执行 已用时间: 16.305(毫秒). 执行号:608.

5、查询表数据

SQL> SELECT * FROM SUN; 行号 A B ---------- ----------- ----------- 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 10 rows got 已用时间: 4.776(毫秒). 执行号:610.

6、全表插入数据

INSERT INTO SUN(A,B) VALUES(100,5); COMMIT;

正常插入,无报错,无需像IDENTITY执行额外语句。

7、单列插入数据

INSERT INTO SUN(B) SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 1; COMMIT;

8、查验数据

SQL> SELECT * FROM SUN; 行号 A B ---------- ----------- ----------- 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 100 5 行号 A B ---------- ----------- ----------- 12 101 1 12 rows got 已用时间: 0.377(毫秒). 执行号:617.

会从最大值的下一个值开始插入。

返回列表