SQL自增字段的相关总结-(主要SqlServe,Oracle)

首先是如何让字段自增

SqlServer中,可以通过给字段设置IDENTITY属性来设置自增字段,但是,这种方法有一些需要注意的地方

1.SqlServer并不能保证字段中不出现重复的数据,原因是在多用户并发访问数据库的情况下,可能会出现这种问题,而且自增字段不一定为主键。但是Mysql没有这个问题,因为用auto_increment设置的自增字段,必须为主键,否则会创建失败。

2.导入数据的问题,在导入数据的时候,此自增字段的值可能已经被使用了,这样就会无法导入,可以使用SET IDENTITY_INSERT

on来暂时停用该表的自增功能,这样就可以插入带有该字段的数据了。需要注意的是:当使用该语句停用自增功能后,插入的数据中必须带有自增字段的值,否则会发生异常。

3.跳号的问题,如果事务中某条插入语句执行失败而回滚,该自增字段仍然会自增,不会还原成事务之前的最大值。

 

Oracle中使用的是SEQUENCE,而在MySql中,是用的auto_increment

与SqlServer不同的是,Oracle的自增字段是自己维护的,也就是说,没有什么特殊的命令来定义一个字段可以自增,而是利用SEQUENCE在插入数据的时候,人工给使数据自动增长。这样的就可以避免Sqlserver中的第2个问题,但是仍然存在跳号的问题。

SEQUENCE如何使用:

语法:

CREATE SEQUENCE MySequence --名称 
START WITH 1 --起始值
INCREMENT 1 --增长值
MINVALUE 1 --最小值
MAXVALUE 9999999 --最大值
NOCACHE --不缓存
NOCYCLE --当取最大值后,时候循环

MySequence.NEXTVAL --取得下一个值
MySequence.CURRVAL --获取当前最大值

如何获取当前自增字段的最大值

SqlServer:IDENT_CURRENT()

Oracle:MySequence.CURRVAL

你可能感兴趣的:(SqlServer,数据库,Oracle)