目录
一、环境信息
二、背景描述
三、操作步骤
1、生成数据
2、修改列属性
3、删除列属性
4、加列属性
5、查询表数据
6、全表插入数据
7、单列插入数据
8、查验数据
一、环境信息
| 名称 | 值 |
| CPU | X86 |
| 操作系统 | 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.会从最大值的下一个值开始插入。