Oracle笔记之序列(Sequence)
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)的更多相关文章
- Oracle数据库中序列(SEQUENCE)的用法详解
Oracle数据库中序列(SEQUENCE)的用法详解 在Oracle数据库中,序列的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值.本文我们主要介绍了 ...
- oracle 中 创建序列sequence
drop sequence SEQ_YCXWP_CGD; create sequence SEQ_YCXWP_CGD increment start nomaxvalue;
- oracle数据库--序列(sequence)
一个问题: 在某张表中,存在一个id列(整数),我们希望在添加记录的时候,该列从1开始,自动的增长,怎么处理? 解决方式:oracle是利用"序列"(sequence)来完成的. ...
- Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence
Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence 使用oracle11g插入数据时遇到这样一个问题: 1 --创建测试表-- 2 CREATE T ...
- Oracle序列(Sequence)创建、使用、修改、删除
Oracle对象课程:序列(Sequence)创建.使用.修改.删除,序列(Sequence)是用来生成连续的整数数据的对象.序列常常用来作为主键中增长列,序列中的可以升序生成,也可以降序生成.创建序 ...
- Oracle 序列(sequence)
序列(sequence) 是Oracle提供的用于生成一系列唯一数字的数据库对象.它会自动生成顺序递增或者递减的序列号,以实现自动提供唯一的主键值.序列可以在多用户并发环境中使用,并且可以为所有用户生 ...
- oracle 序列sequence
查询所有的序列: select 'create sequence '||sequence_name|| ' minvalue '||min_value|| ' maxvalue '||max_valu ...
- Oracle中-事务-序列-视图-数据类型笔记
事务(Transaction) 事务(Transaction)是一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的逻辑工作单位. 事务是为了保证数据库的完整性 在o ...
- ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍
如果我是C罗 原文 ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍 sequence在ORACLE中应用十分广泛,就是序列号的意思,会自动增加指定变数,如逐次增加1或者2或者 ...
随机推荐
- 11月14号站立会议(从即日14号起到24号截至为final阶段工作期)
小组名称:飞天小女警 项目名称:礼物挑选小工具 小组成员:沈柏杉(组长).程媛媛.杨钰宁.谭力铭 代码地址:HTTPS:https://git.coding.net/shenbaishan/GIFT. ...
- 【Leetcode】771. Jewels and Stones
(找了leetcode上最简单的一个题来找一下存在感) You're given strings J representing the types of stones that are jewels, ...
- PAT 甲级 1040 Longest Symmetric String
https://pintia.cn/problem-sets/994805342720868352/problems/994805446102073344 Given a string, you ar ...
- 小程序解密 encryptedData 获取 unionID 等信息
index.php <?php include_once "wxBizDataCrypt.php"; // $appid 由小程序微信官方后台获取 $appid = 'wx4 ...
- bootstrap心得
最近在弄个人的博客,之前对bootstrap的使用老是感觉使用的一般 幸好在看了慕课网的一个老师的实例教程之后,才感觉是真正对前端使用bootstrap有了一点理解 首先就是. 这些标签,其实都是相当 ...
- RFID标签、读卡器、终端、接口的概念
RFID标签:(引用)RFID无线射频识别是一种非接触式的自动识别技术,它通过射频信号自动识别目标对象并获取相关数据,识别工作无须人工干预,可工作于各种恶劣环境.RFID技术可识别高速运动物体并可同时 ...
- oracle 绝对值小于1的数值显示小数点前面的0
SELECT DECODE(TRUNC(-.98),0,REPLACE(TO_CHAR(-.98), '.', '0.'),TO_CHAR(-.98))FROM DUAL;
- ADO.NET DBHelper 类库
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- 第86天:HTML5应用程序标签和智能表单
一.HTML5应用程序标签 1.datalist需要数据载体 input list属性指向数据源 2.progress进度条 -webkit-appearance: none; /*如果要改默认样 ...
- BZOJ 1799 同类分布(数位DP)
给出a,b,求出[a,b]中各位数字之和能整除原数的数的个数.1<=a<=b<=1e18. 注意到各位数字之和最大是153.考虑枚举这个东西.那么需要统计的是[0,a-1]和[0,b ...