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与表没 ...
随机推荐
- centos 7 源代码安装mysql5.6
###### mysql ######### 引言:这里选用mysql5.6版本,5.7版本编译时间需要几个小时. 编译安装环境: yum -y install make gcc-c++ cmake ...
- AutoMatic merge failed;fix conflicts and then commit the result.解决方法
意思是: 冲突内容:合并冲突在 XXXX.DS_Store文件中 自动合并失败:修改冲突然后提交修改后的结果. <<<<<<<< HEAD 你写的代码 ...
- 『计算机视觉』Mask-RCNN_锚框生成
Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』M ...
- 【JS】【1】JavaScript屏蔽Backspace键(避免点击后页面产生回退)
前言: 1,参考资料:JavaScript屏蔽Backspace键 - 孤傲苍狼 - 博客园(http://www.cnblogs.com/xdp-gacl/p/3785806.html) 2,参考的 ...
- Leetcode 1013. 总持续时间可被 60 整除的歌曲
1013. 总持续时间可被 60 整除的歌曲 显示英文描述 我的提交返回竞赛 用户通过次数450 用户尝试次数595 通过次数456 提交次数1236 题目难度Easy 在歌曲列表中,第 i 首 ...
- 第 3 章 HTML5 网页中的文本和图像
文字和图像是网页中最主要.最常用的元素. 在互联网高速发展的今天,网站已经成为一个展示与宣传自我的通信工具(公司或个人可以通过网站介绍公司的服务与产品或介绍自己).这些都离不开网站中的网页,而网页的内 ...
- 集成学习二: Boosting
目录 集成学习二: Boosting 引言 Adaboost Adaboost 算法 前向分步算法 前向分步算法 Boosting Tree 回归树 提升回归树 Gradient Boosting 参 ...
- springMVC Model ModelMap 和 ModelAndView的区别(转)
原文地址:springMVC Model ModelMap 和 ModelAndView的区别 近来在看代码,发现controller里有不同的处理返回数据的方式,而自己一直在用ModelAndVie ...
- 牛客网 PAT 算法历年真题 1011 : 个位数统计 (15)
个位数统计 (15) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 给定一个k位整数N = dk-1*10k- ...
- python 文件的打开与读取
python 文件的打开与读取 其实网上其他人写的都挺好的,我也是看他们的.办公室用的2.7.笔记本用的3.6.发现没有file 类,尴尬了 with open(r'C:\Users\HBX\Docu ...