Oracle中序列是一种数据对象,可以视为一个等差数列,我们自增就是一个遍历这个数列的过程,可以取当前值,也可以将当前值自加n后返回,Sequence与表没有太大的关系,有的时候如果表的主键是数值类型的话可能会使用到Sequence。

1. 创建序列

创建一个序列:

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指定的值,如果在定义完之后想获取当前值的话就会这样:

SQL> SELECT seq_user_id.currVal FROM dual;
SELECT seq_user_id.currVal FROM dual
ORA-08002: 序列 SEQ_USER_ID.CURRVAL 尚未在此会话中定义

这个时候获取一次值(初始化)就好了:

SQL> SELECT seq_user_id.nextVal FROM dual;
NEXTVAL
----------
1 SQL> SELECT seq_user_id.currVal FROM dual;
CURRVAL
----------
1

3. 修改序列

除了START WITH之外的值都可以修改:

ALTER SEQUENCE seq_user_id
INCREMENT BY 1
NOMAXVALUE
NOCYCLE
NOCACHE;

如果想修改START WITH的值的话可以先DROP SEQUENCE,然后再CREATE SEQUENCE。

4. 删除序列

删除序列:

DROP SEQUENCE seq_user_id;

5. 实际例子

举一个表使用序列产生主键的例子。

新建一个用户表:

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)
);

创建一个主键要使用到的序列:

CREATE SEQUENCE seq_user_id
START WITH 1
INCREMENT BY 1
NOMAXVALUE
NOCYCLE
NOCACHE;

插入几条值:

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');

查看表中的数据:

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数据库中序列(SEQUENCE)的用法详解   在Oracle数据库中,序列的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值.本文我们主要介绍了 ...

  2. oracle 中 创建序列sequence

    drop sequence SEQ_YCXWP_CGD; create sequence SEQ_YCXWP_CGD increment start nomaxvalue;

  3. oracle数据库--序列(sequence)

    一个问题: 在某张表中,存在一个id列(整数),我们希望在添加记录的时候,该列从1开始,自动的增长,怎么处理? 解决方式:oracle是利用"序列"(sequence)来完成的. ...

  4. Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence

    Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence 使用oracle11g插入数据时遇到这样一个问题: 1 --创建测试表-- 2 CREATE T ...

  5. Oracle序列(Sequence)创建、使用、修改、删除

    Oracle对象课程:序列(Sequence)创建.使用.修改.删除,序列(Sequence)是用来生成连续的整数数据的对象.序列常常用来作为主键中增长列,序列中的可以升序生成,也可以降序生成.创建序 ...

  6. Oracle 序列(sequence)

    序列(sequence) 是Oracle提供的用于生成一系列唯一数字的数据库对象.它会自动生成顺序递增或者递减的序列号,以实现自动提供唯一的主键值.序列可以在多用户并发环境中使用,并且可以为所有用户生 ...

  7. oracle 序列sequence

    查询所有的序列: select 'create sequence '||sequence_name|| ' minvalue '||min_value|| ' maxvalue '||max_valu ...

  8. Oracle中-事务-序列-视图-数据类型笔记

    事务(Transaction) 事务(Transaction)是一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的逻辑工作单位. 事务是为了保证数据库的完整性 在o ...

  9. ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍

    如果我是C罗 原文 ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍 sequence在ORACLE中应用十分广泛,就是序列号的意思,会自动增加指定变数,如逐次增加1或者2或者 ...

随机推荐

  1. 第163天:js面向对象-对象创建方式总结

    面向对象-对象创建方式总结 1. 创建对象的方式,json方式 推荐使用的场合: 作为函数的参数,临时只用一次的场景.比如设置函数原型对象. var obj = {}; //对象有自己的 属性 和 行 ...

  2. CF373C-Counting Kangaroos is Fun

    题意 有\(n\)只袋鼠,每只袋鼠有一个体积,如果一个袋鼠的体积小于等于另一个袋鼠体积的一半,那么这个袋鼠就可以被那一个袋鼠装进袋里.一个装了袋鼠的袋鼠不能再装或被装.被装进袋子的袋鼠就看不到了. 问 ...

  3. BZOJ 1924 所驼门王的宝藏(强连通分量缩点+DAG最长链)

    思路不是很难,因为宝藏只会在给出的n个点内有,于是只需要在这n个点里面连边,一个点如果能到达另一个点则连一条有向边, 这样用强连通分量缩点后答案就是DAG的最长链. 问题在于暴力建图是O(n^2)的, ...

  4. 【bzoj5174】[Jsoi2013]哈利波特与死亡圣器 二分+树形dp

    题目描述 给你一棵以1为根的有根树,初始除了1号点为黑色外其余点均为白色.Bob初始在1号点.每次Alice将其中至多k个点染黑,然后Bob移动到任意一个相邻节点,重复这个过程.求最小的k,使得无论B ...

  5. CIR,CBS,EBS,PIR,PBS 名词解释 令牌桶应用

    为了达到上述目的,我们需要对进入网络的流量进行监督,实现CAR(Committed Access Rate). CAR:将进入网络的用户流量的速率限制在约定的范围之内,从而避免引起网络拥塞. CIR( ...

  6. 洛谷 P2888 [USACO07NOV]牛栏Cow Hurdles

    题目戳 题目描述 Farmer John wants the cows to prepare for the county jumping competition, so Bessie and the ...

  7. 从块级元素和行内元素的分析到bfc的布局理解

    接口和属性介绍 播放器提供了progressMakers属性,是一个数组类型,每一条记录包含offset时间和text打点的内容,还可以包含其他属性,此属性用于告诉播放器进度条打点记录,记录内容属性说 ...

  8. 基于epoll封装的事件回调miniserver

    epoll技术前两节已经阐述过了,目前主要做一下封装,很多epoll的服务器都是采用事件回调方式处理, 其实并没有什么复杂的,我慢慢给大家阐述下原理. 在networking.h和networking ...

  9. hadoop 安装教程

    本教程由厦门大学数据库实验室 / 给力星出品,转载请注明.本教程适合于原生 Hadoop 2,包括 Hadoop 2.6.0, Hadoop 2.7.1 等版本,主要参考了官方安装教程,步骤详细,辅以 ...

  10. JavaSE的学习路线

    基于现阶段的JavaEE学习的对象,主要是趋向于Web的方向,主要就是说在JavaWeb的基础上进行进一步的开发和学习,下面我会将自己总结的对于自己的一点关于JavaEE学习路线会逐步讲解. 第一部分 ...