id主键自增长那些事
2016-04-01 02:25
204 查看
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
[sql]
view plain
copy
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这样写:
[sql]
view plain
copy
insert into User(id,username,age)values(seq_test.nextval,'qiyue',23);
看得出序列是独立于表的存在。
当然,如果你的id没有限制的话,可以这样写
[sql]
view plain
copy
create sequence seq_id start with 1;
二、indetity
indetity可以被定义为指定的自增属性,即只在其所在表有效,是依附于表的存在。
1. DB2
生成列和标识列
generated by default as identity
generated always as identity
两种不同的的定义方式,从字面意思可看出第一种在插入数据时允许手工指定自增字段的值,只要不重复,数据库会在下次存放数据时自动设置下一个值
第二种则只能由数据库自动分配并插入。
举例说明:
[sql]
view plain
copy
create table User(id int generated by default as identity,username char)
当指定插入default时,id为自增,从1开始
[sql]
view plain
copy
create table User(id int generated always as identity ,username char )
这种方式只能指定插入default,如果指定id的值将会出错
2. MYSQL
[sql]
view plain
copy
create table table1(id int auto_increment primary key,username char(30));
默认id从1开始自增
如果你已建表且主键未自增,删除主键,使用添加语句使表自增:
[sql]
view plain
copy
alter table table2 add id int auto_increment primary key;
一定要设置为主键,当前最大值当然是max(id)。
插入数据的时候不需对自增字段设值,如
[sql]
view plain
copy
insert into table1(username)values('qiyue');
3. SQLServer
[sql]
view plain
copy
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(初始值,增量);
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
[sql]
view plain
copy
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这样写:
[sql]
view plain
copy
insert into User(id,username,age)values(seq_test.nextval,'qiyue',23);
看得出序列是独立于表的存在。
当然,如果你的id没有限制的话,可以这样写
[sql]
view plain
copy
create sequence seq_id start with 1;
二、indetity
indetity可以被定义为指定的自增属性,即只在其所在表有效,是依附于表的存在。
1. DB2
生成列和标识列
generated by default as identity
generated always as identity
两种不同的的定义方式,从字面意思可看出第一种在插入数据时允许手工指定自增字段的值,只要不重复,数据库会在下次存放数据时自动设置下一个值
第二种则只能由数据库自动分配并插入。
举例说明:
[sql]
view plain
copy
create table User(id int generated by default as identity,username char)
当指定插入default时,id为自增,从1开始
[sql]
view plain
copy
create table User(id int generated always as identity ,username char )
这种方式只能指定插入default,如果指定id的值将会出错
2. MYSQL
[sql]
view plain
copy
create table table1(id int auto_increment primary key,username char(30));
默认id从1开始自增
如果你已建表且主键未自增,删除主键,使用添加语句使表自增:
[sql]
view plain
copy
alter table table2 add id int auto_increment primary key;
一定要设置为主键,当前最大值当然是max(id)。
插入数据的时候不需对自增字段设值,如
[sql]
view plain
copy
insert into table1(username)values('qiyue');
3. SQLServer
[sql]
view plain
copy
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(初始值,增量);
相关文章推荐
- SSH动态查询封装接口介绍
- SSH动态查询具体实现之service
- SSH动态查询具体实现之Dao
- hdu254 DFS+BFS
- ASP.NET global.asax、httpHandlers、httpModules 后门-园长
- 数据库面试题 2
- 传智播客数据库面试
- Unity Shaders and Effects Cookbook (3-1) 使用Unity 内置的Specular Lighting - BlinnPhong
- WebGL 雨水特效
- MySql修改数据库编码为UTF8
- Java并发与多线程(2) 生产者与消费者
- OpenGL的矩阵
- HQL实现普通查询及分页查询详解
- 关于结构体未定
- Oracle 知识详解
- 基于zmap 的应用层扫描器 zgrab (一)
- JDBC小结
- jQuery,input,value
- Hue的安装与部署
- 夜深人静写算法(2):动态规划