oracle sequence
代码块
方法一:
(1)删除序列; (2)重新创建; 这个方法比较简单粗暴。
drop sequence sequence_name; create sequence sequence_name
minvalue 1 //最小值
maxvalue 999999999999999999999999999 //最大值
start with 10 //初始值
increment by 1 //步长
cache 20 //序列号缓存
order; //按顺序产生序列值 方法二:
通过Increment By来实现修改初始值。
例如:若序列名称是seq_name,初始值是15,而现在要设置初始值为1015,Increment By值为:1000(1013-13)
1) 执行:alter sequence seq_name increment by 1000;
2) 执行:select seq_name .nextval from dual;
3) 执行:alter sequence seq_name increment by 1;
修改完成。
详解
Oracle中序列是一种数据对象,可以视为一个等差数列,我们自增就是一个遍历这个数列的过程,可以取当前值,也可以将当前值自加n后返回,Sequence与表没有太大的关系,有的时候如果表的主键是数值类型的话可能会使用到Sequence。
1. 创建序列
创建一个序列:
1
2
3
4
5
6
|
CREATE SEQUENCE seq_user_id START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE; |
CREATE SEQUENCE seq_user_id 创建的时候指定序列的名字
START WITH 1 从1开始
INCREMENT BY 1 每次自增1
NOMAXVALUE 不设置最大值
NOCYCLE 不循环自增,循环的话到达最大值就又回去了
NOCACHE 不缓存,如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组 到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。
创建序列的时候需要有create sequence或者create any sequence权限。
2. 使用序列
sequenceName.currVal 获取序列的当前值
sequenceName.nextVal 获取序列的下一个值,即将当前值自增后返回
需要注意在第一次使用序列的时候(sequenceName.nextVal)才会真正去初始化它,初始化之前序列是不存在的,第一次返回的是初始值,即START WITH指定的值,如果在定义完之后想获取当前值的话就会这样:
1
2
3
|
SQL> SELECT seq_user_id.currVal FROM dual; SELECT seq_user_id.currVal FROM dual ORA-08002: 序列 SEQ_USER_ID.CURRVAL 尚未在此会话中定义 |
这个时候获取一次值(初始化)就好了:
1
2
3
4
5
6
7
8
9
|
SQL> SELECT seq_user_id.nextVal FROM dual; NEXTVAL ---------- 1 SQL> SELECT seq_user_id.currVal FROM dual; CURRVAL ---------- 1 |
3. 修改序列
除了START WITH之外的值都可以修改:
1
2
3
4
5
|
ALTER SEQUENCE seq_user_id INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE; |
如果想修改START WITH的值的话可以先DROP SEQUENCE,然后再CREATE SEQUENCE。
4. 删除序列
删除序列:
1
|
DROP SEQUENCE seq_user_id; |
5. 实际例子
举一个表使用序列产生主键的例子。
新建一个用户表:
1
2
3
4
5
6
|
CREATE TABLE t_user( id INT NOT NULL , username VARCHAR2(20) NOT NULL , passwd CHAR (32) NOT NULL , CONSTRAINT PK_T_USER PRIMARY KEY (id) ); |
创建一个主键要使用到的序列:
1
2
3
4
5
6
|
CREATE SEQUENCE seq_user_id START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE; |
插入几条值:
1
2
3
4
|
INSERT INTO t_user (id, username, passwd) VALUES (seq_user_id.nextVal, 'Sam' , 'd8578edf8458ce06fbc5bb76a58c5ca4' ); INSERT INTO t_user (id, username, passwd) VALUES (seq_user_id.nextVal, 'Tom' , 'd8578edf8458ce06fbc5bb76a58c5ca4' ); INSERT INTO t_user (id, username, passwd) VALUES (seq_user_id.nextVal, 'John' , 'd8578edf8458ce06fbc5bb76a58c5ca4' ); INSERT INTO t_user (id, username, passwd) VALUES (seq_user_id.nextVal, 'Alice' , 'd8578edf8458ce06fbc5bb76a58c5ca4' ); |
查看表中的数据:
1
2
3
4
5
6
7
|
SQL> SELECT * FROM t_user; ID USERNAME PASSWD --------------------------------------- -------------------- -------------------------------- 1 Sam d8578edf8458ce06fbc5bb76a58c5ca4 2 Tom d8578edf8458ce06fbc5bb76a58c5ca4 3 John d8578edf8458ce06fbc5bb76a58c5ca4 4 Alice d8578edf8458ce06fbc5bb76a58c5ca4 |
oracle sequence的更多相关文章
- oracle SEQUENCE 创建, 修改,删除
oracle创建序列化: CREATE SEQUENCE seq_itv_collection INCREMENT BY 1 -- 每次加几个 STA ...
- Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍
引用自 :http://www.2cto.com/database/201307/224836.html Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍 先假设有这么一个表 ...
- Oracle Sequence创建与使用
一.Sequence简介 Sequence是数据库系统按照一定的规则自动增加的数字序列,主要用于生成数据库数据记录.这个序列一般作为代理主键(因为不会重复). Sequence是数据中一个特殊存放等差 ...
- Oracle Sequence Cache 参数说明
转自 http://blog.csdn.net/tianlesoftware/article/details/5995051 之前整理的一篇文章: ORACLE SEQUENCE 介绍 http:// ...
- 基于Oracle Sequence的流水号生成规则
流水号在各种系统中随处可见,一般都是使用自增.年月日时分秒+自增.UUID等,要么纯数字,要么纯字母,这种流水号缺乏一定的辨识度. 下面为大家介绍一种具有辨识度的流水号的生成方式:领域或者应用的标识 ...
- Oracle SEQUENCE 具体说明
ORACLE SEQUENCE ORACLE没有自增数据类型,如需生成业务无关的主键列或惟一约束列,能够用sequence序列实现. CREATE SEQUENCE语句及參数介绍: 创建序 ...
- ORACLE Sequence 自增长
Sequence是数据库系统按照一定规则自动增加的数字序列.这个序列一般作为代理主键(因为不会重复),没有其他任何意义. Sequence是数据库系统的特性,有的数据库有Sequence,有的没有.比 ...
- ORACLE SEQUENCE用法(转)
ORACLE SEQUENCE用法 在oracle中sequence就是序号,每次取的时候它会自动增加.sequence与表没有关系. 1.Create Sequence 首先要有CREATE ...
- ORACLE SEQUENCE用法
引用自: http://www.cnblogs.com/hyzhou/archive/2012/04/12/2444158.html 在oracle中sequence就是序号,每次取的时候它会自动增加 ...
- 【转】oracle Sequence
http://blog.csdn.net/zhoufoxcn/article/details/1762351 在oracle中sequence就是序号,每次取的时候它会自动增加.sequence与表没 ...
随机推荐
- django权限管理(一)
权限:权限就是一个包含正则的url. Rbac 权限管理: Role-Based Access Control,基于角色的访问控制.用户通过角色与权限进行关联,一个用户可以有多个角色,一个角色可以有多 ...
- 安装redisPHP扩展
1. "predis/predis":"~1.1@dev" 2.composer update 即可,这是给项目添加redis扩展 启动服务端 redis-se ...
- java设计模式之生产者/消费者模式
什么是生产者/消费者模式? 某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类.函数.线程.进程等).产生数据的模块,就形象地称为生产者:而处理数据的模块,就称为消费者 ...
- bool类型为什么可以当做int
实际上bool型变量占用了一个字节的内存,当值为false的时候,实际存储的是0x00,为true时实际存储的是0x01,因此可以作为int整型使用 bool型只分0与非0,0为false,其余的包括 ...
- WebSphere ssl证书公钥少于2048问题处理
WebSphere https默认使用的是安装时生成的IBM签名的证书,该证书密钥长度1024位在某些检查中会认为这不够安全.处理这个问题我们可以创建一个自签名的证书作为默认证书. 登录控制台,安全性 ...
- WebSphere禁用SSLv3和RC4算法教程
WebSphere经常会报“SSL 3.0 POODLE攻击信息泄露”和"SSL/TLS 受诫礼(BAR-MITZVAH)攻击"两个漏洞,前者建议禁用SSL算法后者建议禁用RC4算 ...
- Spring控制反转(依赖注入)的最简单说明
1.常规方式实现实例化 1.1已有角色如下: 一个接口Interface,两个接口实现类InstatnceA.InstanceB,一个调用类User 1.2当前实例化InstanceA如下: Inte ...
- wps去除首字母自动大写
首字母大写功能在不是进行英文编写时是个“自作聪明”的功能,我们可能会想把它关掉.
- Java自动装箱中的缓存原理
今天看到一道'经典'面试题: Integer a = 100; Integer b = 100; System.out.println(a==b); Integer a2 = 200; Integer ...
- laravel中对模型和路由做缓存,提高性能
模型缓存命令: php think optimize:schema 路由缓存命令: php think optimize:route