代码块

方法一:
(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
INCREMENT BY
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的更多相关文章

  1. oracle SEQUENCE 创建, 修改,删除

    oracle创建序列化: CREATE SEQUENCE seq_itv_collection            INCREMENT BY 1  -- 每次加几个              STA ...

  2. Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍

    引用自 :http://www.2cto.com/database/201307/224836.html   Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍 先假设有这么一个表 ...

  3. Oracle Sequence创建与使用

    一.Sequence简介 Sequence是数据库系统按照一定的规则自动增加的数字序列,主要用于生成数据库数据记录.这个序列一般作为代理主键(因为不会重复). Sequence是数据中一个特殊存放等差 ...

  4. Oracle Sequence Cache 参数说明

    转自 http://blog.csdn.net/tianlesoftware/article/details/5995051 之前整理的一篇文章: ORACLE SEQUENCE 介绍 http:// ...

  5. 基于Oracle Sequence的流水号生成规则

    流水号在各种系统中随处可见,一般都是使用自增.年月日时分秒+自增.UUID等,要么纯数字,要么纯字母,这种流水号缺乏一定的辨识度. 下面为大家介绍一种具有辨识度的流水号的生成方式:领域或者应用的标识 ...

  6. Oracle SEQUENCE 具体说明

     ORACLE  SEQUENCE     ORACLE没有自增数据类型,如需生成业务无关的主键列或惟一约束列,能够用sequence序列实现. CREATE SEQUENCE语句及參数介绍: 创建序 ...

  7. ORACLE Sequence 自增长

    Sequence是数据库系统按照一定规则自动增加的数字序列.这个序列一般作为代理主键(因为不会重复),没有其他任何意义. Sequence是数据库系统的特性,有的数据库有Sequence,有的没有.比 ...

  8. ORACLE SEQUENCE用法(转)

    ORACLE SEQUENCE用法 在oracle中sequence就是序号,每次取的时候它会自动增加.sequence与表没有关系. 1.Create Sequence     首先要有CREATE ...

  9. ORACLE SEQUENCE用法

    引用自: http://www.cnblogs.com/hyzhou/archive/2012/04/12/2444158.html 在oracle中sequence就是序号,每次取的时候它会自动增加 ...

  10. 【转】oracle Sequence

    http://blog.csdn.net/zhoufoxcn/article/details/1762351 在oracle中sequence就是序号,每次取的时候它会自动增加.sequence与表没 ...

随机推荐

  1. django权限管理(一)

    权限:权限就是一个包含正则的url. Rbac 权限管理: Role-Based Access Control,基于角色的访问控制.用户通过角色与权限进行关联,一个用户可以有多个角色,一个角色可以有多 ...

  2. 安装redisPHP扩展

    1. "predis/predis":"~1.1@dev" 2.composer update 即可,这是给项目添加redis扩展 启动服务端 redis-se ...

  3. java设计模式之生产者/消费者模式

    什么是生产者/消费者模式? 某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类.函数.线程.进程等).产生数据的模块,就形象地称为生产者:而处理数据的模块,就称为消费者 ...

  4. bool类型为什么可以当做int

    实际上bool型变量占用了一个字节的内存,当值为false的时候,实际存储的是0x00,为true时实际存储的是0x01,因此可以作为int整型使用 bool型只分0与非0,0为false,其余的包括 ...

  5. WebSphere ssl证书公钥少于2048问题处理

    WebSphere https默认使用的是安装时生成的IBM签名的证书,该证书密钥长度1024位在某些检查中会认为这不够安全.处理这个问题我们可以创建一个自签名的证书作为默认证书. 登录控制台,安全性 ...

  6. WebSphere禁用SSLv3和RC4算法教程

    WebSphere经常会报“SSL 3.0 POODLE攻击信息泄露”和"SSL/TLS 受诫礼(BAR-MITZVAH)攻击"两个漏洞,前者建议禁用SSL算法后者建议禁用RC4算 ...

  7. Spring控制反转(依赖注入)的最简单说明

    1.常规方式实现实例化 1.1已有角色如下: 一个接口Interface,两个接口实现类InstatnceA.InstanceB,一个调用类User 1.2当前实例化InstanceA如下: Inte ...

  8. wps去除首字母自动大写

    首字母大写功能在不是进行英文编写时是个“自作聪明”的功能,我们可能会想把它关掉.

  9. Java自动装箱中的缓存原理

    今天看到一道'经典'面试题: Integer a = 100; Integer b = 100; System.out.println(a==b); Integer a2 = 200; Integer ...

  10. laravel中对模型和路由做缓存,提高性能

    模型缓存命令: php think optimize:schema 路由缓存命令: php think optimize:route