代码块

方法一:
(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. hadoop挂载多硬盘,ZZ-- multiple disks per node

    hadoop挂载多硬盘 ...multiple disks per node  multiple disks per node Read more at: http://www.queryhome.c ...

  2. android -------- 错误Attribute application@allowBackup value=(true) from AndroidManifest.xml

    开发中遇到一个问题,运行项目时,出现了一个这如下这样的问题 问题: Manifest merger failed : Attribute application@allowBackup value=( ...

  3. PHP个人博客项目------切切歆语博客

    php+mysql+apache, ThinkPHP3.2框架开发 我的个人博客项目 适合新手练习 源码地址下载:https://github.com/DickyQie/php-myblog

  4. day 7 -10 集合,文本、文件操作,函数

    day7 一.回顾 1.列表和字典在循环里边尽量不要删除元素,很麻烦 2.元组:如果元组里边只有一个逗号,且不加逗号,次元素是什么类型,就是什么类型. 二.集合 ''' 集合:可变的数据类型,它里边的 ...

  5. HTML 5 <span> 标签

    标签定义及使用说明 <span> 用于对文档中的行内元素进行组合. <span> 标签没有固定的格式表现.当对它应用样式时,它才会产生视觉上的变化.如果不对 <span& ...

  6. [luogu P2294] [HNOI2005]狡猾的商人

    [luogu P2294] [HNOI2005]狡猾的商人 题目描述 输入输出格式 输入格式: 从文件input.txt中读入数据,文件第一行为一个正整数w,其中w < 100,表示有w组数据, ...

  7. [LeetCode] 201. Bitwise AND of Numbers Range ☆☆☆(数字范围按位与)

    https://leetcode.com/problems/bitwise-and-of-numbers-range/discuss/56729/Bit-operation-solution(JAVA ...

  8. nc(netcat)扫描开放端口

    探测单个端口是否开放可以用telnet,专业探测端口可以用Nmap,而对于非渗透用途的Linux可以直接用netcat. 1.使用netcat探测端口是否开放 nc -z -v - #z代表不交互要不 ...

  9. php composer 使用 以及 psr0和psr4的真正区别

    composer 使用 项目和库之间唯一的区别是,你的项目是一个没有名字的包 包名不区分大小写,但惯例是使用小写字母,并用连字符作为单词的分隔 入门比较好资源: 官网适合读一遍  https://do ...

  10. python 豆瓣验证码识别总结

    总结:  pytesseract 识别比较标准的图片  识别成功率   还是不错的. 验证码的图片识别 需要先处理好   再用pytesseract 识别 from PIL import Image  ...