Oracle 数据库 顺序
与Mysql数据库拥有主键自增功能不同的是,oracle数据额外提供了一种对象(object),为使用者自动生成唯一的整数值,通过此帮助生成自增主键。
常见的语法为:
CREATE SEQUENCE [ schema.] 顺序id
[ { INCREMENT BY 数值 | START WITH 数值} --增量值 |开始值
| { MAXVALUE integer | NOMAXVALUE } --最大顺序号 |不设置最大顺序号
| { MINVALUE integer | NOMINVALUE } --最小顺序号 |不设置最小顺序号
| { CYCLE | NOCYCLE } --循环 | 不循环
| { CACHE 数值 | NOCACHE } --缓存 | 不加缓存
| { ORDER | NOORDER } --排序 | 不排序
];
常见使用方法:
SequeceId.currval; --返回当前顺序的值。
SequeceId.nextval ; --根据设定的增量值增加顺序值并返回
(注意:在第一次nextval初始化之后才能使用currval,否则会出错 )个人认为这是Oracle的一个弊端(*>﹏<*)
其中CACHE是指缓存值,如果指定cache值,那么Oracle数据库就可以预先在内存里面放置一些Sequence,这样存储顺序的时候就会相对快一些。
为方便理解给出如下的几个案例代码:
1. 建一个顺序,要求从99计数,并且只使用奇数,要求cache是10,需要排序,可循环,最大值10000:
CREATE SEQUENCE seq_users /*顺序名*/
INCREMENT BY 2
START WITH 99
MAXVALUE 10000
CYCLE
CACHE 10
ORDER;
2. 显示出顺序的当前值是 999:
alter sequence seq_users INCREMENT BY 900;
/*alter关键字 可以修改顺序基本属性,这边修改顺序增量*/
select SEQ_USERS.nextval from dual; /*初始化查询先nextval*/
select SEQ_USERS.currval from dual; /*查询当前currval*/
关于查询时使用的dual,dual是Oracle中的一个伪表,可以利用该伪表设置或查看序列,或是调用一些内置的函数,方便操作它们。(有空时我再写一篇详细博客进行说明)
3. 将顺序初始化成99,并显示初始化后的值:
DROP SEQUENCE seq_users; /*删除原来的顺序*/
CREATE SEQUENCE seq_users /*新建一个顺序*/
INCREMENT BY 2
START WITH 99
MAXVALUE 10000
CYCLE
CACHE 10
ORDER;
select SEQ_USERS.nextval from dual; /*初始化查询先nextval*/
select SEQ_USERS.currval from dual; /*查询当前currval*/