Oracle、DB二、PostgreSQL之Sequence总结
Sequence是数据库系统按照必定规则自动增长的数字序列。这个序列通常做为代理主键(由于不会重复),没有其余任何意义。
Sequence是数据库系统的特性,有的数据库有Sequence,有的没有。好比Oracle、DB二、PostgreSQL数据库有Sequence,MySQL、SQL Server、Sybase等数据库没有Sequence。
根据我我的理解,Sequence是数据中一个特殊存放等差数列的表,该表受数据库系统控制,任什么时候候数据库系统均可以根据当前记录数大小加上步长来获取到该表下一条记录应该是多少,这个表没有实际意义,经常用来作主键用,很是不错,呵呵,不过很郁闷的各个数据库厂商尿不到一个壶里--各有各的一套对Sequence的定义和操做。在此我对常见三种数据库的Sequence的定义和操做作一个对比和总结,以便往后查看。
1、定义Sequence
定义一个seq_test,最小值为10000,最大值为99999999999999999,从20000开始,增量的步长为1,缓存为20的循环排序Sequence。
Oracle的定义方法:
create sequence seq_test
minvalue 10000
maxvalue 99999999999999999
start with 20000
increment by 1
cache 20
cycle
order;
DB2的写法:
create sequence seq_test
as bigint
start with 20000
increment by 1
minvalue 10000
maxvalue 99999999999999999
cycle
cache 20
order;
PostgreSQL的写法:
create sequence seq_test
increment by 1
minvalue 10000
maxvalue 99999999999999999
start 20000
cache 20
cycle;
2、Oracle、DB二、PostgreSQL数据库Sequence值的引用参数为:currval、nextval,分别表示当前值和下一个值。下面分别从三个数据库的Sequence中获取nextval的值。
Oracle中:seq_test.nextval
例如:select seq_test.nextval from dual;
DB2中:nextval for seq_test
例如:values nextval for seq_test;
PostgreSQL中:nextval(seq_test)
例如:select nextval(seq_test);
3、Sequence与indentity的区别与联系
Sequence与indentity的基本做用都差很少。均可以生成自增数字序列。
Sequence是数据库系统中的一个对象,能够在整个数据库中使用,和表没有任何关系;indentity仅仅是指定在表中某一列上,做用范围就是这个表。
--------完-------