http://blog.csdn.net/qiyuexuelang/article/details/9531891
- create sequence seq_id start with 1;
很多id 爱好者 喜欢在新建数据库表时,先添加id number字段,为了方便插入数据,尤喜欢将id设为自增字段。
那么几天在前辈的经验之上总结一下那些能使字段自增的方法
一、 Sequence
Sequence是数据库系统按照一定规则自动增加的数字序列。我们一般将此序列看做代理主键。要使用它的筒靴们要注意它所存在的数据库有:Oracle、DB2、PostgreSQL。
而很多人熟悉的MySQL、SQL Server则没有此序列。
以Oracle内的Sequence为例说明其使用方法:
1. 定义Sequence
定义一个seq_test,最小值为100000 ,最大值为600000,从101000开始,增量为1,缓存为20的循环排序Sequence
- create sequence seq_test
- minvalue 100000
- maxvalue 600000
- start with 101000
- increment by 1
- catch 20
- cycle
- order;
2.Sequence使用
Oracle等数据库Sequence的引用参数为currval、nextval,分别表示当前id和下一个id
select seq_test.nextval from dual;表示查询下一个id值
这样若有表User,字段有id(number)、username(varchar)、age(number),当保存新数据时 可以SQL这样写:
- insert into User(id,username,age)values(seq_test.nextval,'qiyue',23);
看得出序列是独立于表的存在。
当然,如果你的id没有限制的话,可以这样写
- create sequence seq_id start with 1;
二、indetity
indetity可以被定义为指定的自增属性,即只在其所在表有效,是依附于表的存在。
1. DB2
生成列和标识列
generated by default as identity
generated always as identity
两种不同的的定义方式,从字面意思可看出第一种在插入数据时允许手工指定自增字段的值,只要不重复,数据库会在下次存放数据时自动设置下一个值
第二种则只能由数据库自动分配并插入。
举例说明:
- create table User(id int generated by default as identity,username char)
当指定插入default时,id为自增,从1开始
- create table User(id int generated always as identity ,username char )
这种方式只能指定插入default,如果指定id的值将会出错
2. MYSQL
- create table table1(id int auto_increment primary key,username char(30));
默认id从1开始自增
如果你已建表且主键未自增,删除主键,使用添加语句使表自增:
- alter table table2 add id int auto_increment primary key;
一定要设置为主键,当前最大值当然是max(id)。
插入数据的时候不需对自增字段设值,如
- insert into table1(username)values('qiyue');
3. SQLServer
- create table testtable1(id int IDENTITY,department varchar(12) )
- select * from testtable1
- insert into testtable1 values('设计')
- insert into testtable1 values('市场')
- insert into testtable1 values('售后')
- /*结果
- id department
- 1 设计
- 2 市场
- 3 售后
- */
如果你要新建的表id有初始值 则表示为:id int identity(初始值,增量);