自增列插入数据问题
在使用数据库时有时候我们会向自增列插入数据,但是在自增列中数据是无法插入的,这时候我们可以通过SET IDENTITY_INSERT方式来插入数据
自增列使用注意事项:
1.自增列只适用于int和bigint字符类型,其它字符类型不适用
2.自增列的值不允许修改和更新
有一些特殊情况我们可能需要向自增列插入数据,这个时候我们需要使用SET IDENTITY_INSERT。在使用这个命令时也有一些注意事项
1.IDENTITY_INSERT属性的默认值为OFF。SET IDENTITY_INSERT 的设置是在 执行或运行时进行的。当一个连接结束,IDENTITY_INSERT属性将被自动还原为OFF;
2.DM 要求一个会话连接中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON, 当设置一个新的表 IDENTITY_INSERT 属性设置为 ON 时,之前已经设置为 ON 的表会自 动还原为OFF。当一个表的IDENTITY_INSERT 属性被设置为ON时,该表中的自动增量 列的值由用户指定。如果插入值大于表的当前标识值(自增列当前值),则 DM自动将新插入 值作为当前标识值使用,即改变该表的自增列当前值;否则,将不影响该自增列当前值;
3.当设置一个表的 IDENTITY_INSERT 属性为OFF时,新插入行中自增列的当前值 由系统自动生成,用户将无法指定;
4.自增列一经插入,无法修改;
5.手动插入自增列,除了将IDENTITY_INSERT设置为ON,还要求在插入列表中明 确指定待插入的自增列列名。插入方式与非 IDENTITY 表是完全一样的。如果插入时,既 不指定自增列名也不给自增列赋值,则新插入行中自增列的当前值由系统自动生成。
我们来新建一张表使用自增列属性
create table test1 (id int identity, name char(20))
向表内插入数据查看自增列变化
insert into test1 values ('lhq')
insert into test1 values ('ssy')
insert into test1 values ('ysy')
查看表内数据情况
可以看到ID自增列的数据已自动增加
此时我们向自增列插入数据
insert into test1 values (4,'wn')
报错如下
此时就需要用到语句SET IDENTITY_INSERT
SET IDENTITY_INSERT SYSDBA.TEST1 on
此时在插入列表中明确指定待插入的自增列列名
insert into test1 (id , name) values (4,'wn')
查看是否插入成功
插入成功
手动插一个非顺序的数据,然后再插入数据,再查看自增列
insert into test1 (id , name) values (7,'ljd')
insert into test1 values ('lsy')
查看表中数据
可以看到后续的数据会根据手动插入的顺序执行