浅谈Oracle的Sequence序列

Oracle的Sequence是一种数据库对象,它可以生成有序数字,主要用于主键的自动生成。如果没有 Sequence,主键的自动生成必须得在代码逻辑里实现,大致过程是:获取当前主键值,新主键值=当前 主键值+增量。如果多个用户同时请求新主键,则会产生并发等待,影响效率,Sequence就是用来解决 这个问题。

创建Sequence

CREATE SEQUENCE emp_sequence
      INCREMENT BY 1
      START WITH 1
      NOMAXVALUE
      NOCYCLE
      CACHE 10;

上面大部分的名词不需要过多解释,只要懂英文的人一看就知道什么意思,唯一需要解释的是CACHE ,它是指在内存SGA中缓存的数量,主要是出于性能方面的考虑。关于CACHE还有一点需要注意:如果数 据库实例异常宕机,会导致内存中的CACHE值丢失,数据库恢复时,将跳过这些CACHE。

修改Sequence

ALTER SEQUENCE emp_sequence
    INCREMENT BY 10
    MAXVALUE 10000
    CYCLE
    CACHE 20;

语法和创建Seqence差不多,不用过多解释。

使用Sequence

CURRVAL - Sequence当前值,可多次使用,不会自增长;

NEXTVAL - Sequence下一个值,每使用一次,都会触发一次自增长。

为了保证数据在全局的唯一性,在每个session里,必须先NEXTVAL初始化后,才能使用CURRVAL,否 则会报错(ORA-08002)。

Sequence可以用在insert, update, select中:

INSERT INTO Line_items_tab (Orderno, Partno, Quantity)
    VALUES (Order_seq.CURRVAL, 20321, 3);
UPDATE Orders_tab
    SET Orderno = Order_seq.NEXTVAL
    WHERE Orderno = 10112;
SELECT Order_seq.NEXTVAL FROM dual;

删除Sequence

DROP SEQUENCE order_seq;

使用触发器实现自动递增列

Oracle不支持实现自动递增列(MySQL可以),即不能把Sequence做为默认值放在列的属性里,但可 以通过触发器实现,设置好触发器之后,所有的插入语句,将忽略传入的主键,只使用指定的Sequence 生成主键。

修改Sequence的Start with

Oracle规定不能直接修改sequence的start with,报错如下:

SYS@PROD>alter sequence p95169_test.seq_SYMPTOM_ALIAS START WITH 300;
alter sequence p95169_test.seq_SYMPTOM_ALIAS START WITH 300
                                             *
ERROR at line 1:
ORA-02283: cannot alter starting sequence number

但我们可以通过重建sequence的方式达到目的:

SYS@PROD>drop sequence P95169_TEST.SEQ_SYMPTOM_ALIAS;  

Sequence dropped.  

SYS@PROD>CREATE SEQUENCE P95169_TEST.SEQ_SYMPTOM_ALIAS INCREMENT BY 1 START WITH 300 

NOMAXVALUE NOCYCLE CACHE 10;  

Sequence created.

Sequence和性能

和Sequence性能最相关的是Cache属性,Cache越大,性能越好,但占用的内存也越大,而且数据库 重启后会导致跳号的情况,所有如果应用不允许跳号产生,那么只能使用NoCache属性

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索oracle
, 触发器
, cache
, 内存占用 递增
, start with
, sequence
, mysql自动递增值
, oracle主键
修改自增长主键
序列sequence、oracle sequence、oracle sequence 创建、oracle sequence 重置、oracle sequence 查询,以便于您获取更多的相关知识。

时间: 2025-01-20 21:42:50

浅谈Oracle的Sequence序列的相关文章

浅谈Oracle数据库的建模与设计_oracle

正在看的ORACLE教程是:浅谈Oracle数据库的建模与设计.要开发一个基于数据库的应用系统,其中最关键的一步就是整个系统所依据的数据库的建模设计,从逻辑的到物理的,一个环节疏于设计,整个的应用系统便似建立在危房之上,随着开发过程的不断深入,它要随时面临着各种难  以预料的风险,开发者要为修改或重新设计没有设计好的数据库系统而付出难以预料的代价.所以,一个良好的数据库设计是高效率的系统所必须的.  一.逻辑建模  数据库设计的方法因具体数据库而异,但是建模阶段的相同的,所以可以用一些通用的工具

浅谈Oracle数据库外部身份认证研究

以下的文章主要是浅谈Oracle数据库的外部身份认证实际研究,我在一个信誉度很好的网站,找到了一个关于浅谈Oracle数据库外部身份认证的一些实用性很强的相关资料,拿出来供大家分享. 一.服务器上使用操作系统验证 1.配置SQLNET.ORA文件 参数NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)表明解析客户端连接时所用的主机字符串的方式.TNSNAMES表示采用TNSNAMES.ORA文件来解析:ONAMES表示Oracle使用自己的名称服

浅谈Oracle ERP上线准备的五条重要经验

以Oracle ERP(EBS,E-Business Suite)为例,作为先进的企业信息化旗舰产品,不仅有优秀的技术构架,更重要的是其中蕴含的经由资深行业顾问提炼的最佳解决方案,这才是ERP的精髓所在.企业在实施ERP系统时,除了要选择优秀咨询公司和资深顾问团队以外,更要做到"三分技术,七分管理 ",从各方面做好准备和协调工作,这样才能取得较短的实施周期和完美的上线开局.ERP系统的效果(无论是管理层面,还是运营层面)是在使用二.三年后才会真正体现出来,而上线前的咨询.业务流重组和规

浅谈oracle中SYS_CONTEXT上下文关系以及TCP和IPC两种连接方式

前天维护数据库,在执行某个的脚本时,发现结果与实际情况有所出入.对该脚本进行检查,发现其中包含有一条子查询语句: SELECT sys_context('userenv','ip_address') from DUAL; 在sqlplus内执行,返回结果为空.经翻阅资料,发现该语句的作用是返回一个上下文的参数值.其中sys_context是一个oracle关键字,用于查询一个命名空间(namespace)中某个参数(parameter)的值.Oracle默认建立的命名空间为"userenv&qu

浅谈Oracle外部身份认证研究

一.服务器上使用操作系统验证     1.配置SQLNET.ORA文件     参数NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)表明解析客户端连接时所用的主机字符串的方式    TNSNAMES表示采用TNSNAMES.ORA文件来解析:    ONAMES表示Oracle使用自己的名称服务器(Oracle Name Server)来解析,目前Oracle建议使用轻量目录访问协议LDAP来取代ONAMES:    HOSTNAME表示使用h

浅谈ORACLE 10G 闪回恢复区

oracle|恢复   何为闪回恢复区 Oracle 10g 有一项新功能称为:自动的基于磁盘的备份与恢复( Automatic Disk-Based Backup and Recovery ).实现该功能的基础为本文要讲述的闪回恢复区( Flash Recovery Area ).闪回恢复区是 Oracle 10g 中的新事物.简单的说,闪回恢复区是一块用以存储恢复相关的文件的存储空间.允许用户集中存储所有恢复相关的文件.   闪回恢复区可以放在如下几种存储形式上: l         目录

浅谈Oracle事务开始与结束

事务是用来分割数据库活动的逻辑工作单元,事务即有起点,也有终点: 当下列事件之一发生时,事务就开始了: 连接到数据库上,并执行了第一天 DML 语句: 当前一个事务结束后,又输入了另外一条 DML 语句: 当下列事件之一发生时,事务就结束了: 执行 COMMIT 或 ROLLBACK语句:执行一条 DLL语句,例如 CREATE TABLE 语句:在这种情况下, 会自动执行 COMMIT 语句:执行一条 DCL语句,例如GRANT语句:在这种情况下,会自动执行COMMIT语句: 断开与数据库的连

浅谈Oracle的行级锁

㈠ 单实例Oracle locking机制 locking机制的三大组成部分: ① resource structure Oracle对于每个需要"并发访问"的资源,都在SGA中用一个数据结构来描述它 这个结构叫resource structure 这个数据结构有三个成员:owner.waiter和converter 这是3个指针 指向由lock structure组成的链表的指针 其中,converter和waiter有些区别: 如果某个操作先后需要两种不同模式的锁,比如,先S,后X

浅谈Oracle应用设计

我们通常将最常用的应用分为2种类型:联机事务处理类型(OLTP),决策支持系统(DSS). 一.联机事务处理(OLTP) 该类型的应用是高吞吐量,插入.更新.删除操作比较多的系统,这些系统以不断增长的大容量数据为特征,它们提供给成百用户同时存取,典型的OLTP系统是订票系统,银行的业务系统,订单系统.OTLP的主要目标是可用性.速度.并发性和可恢复性. 当设计这类系统时,必须确保大量的并发用户不能干扰系统的性能.还需要避免使用过量的索引与cluster 表,因为这些结构会使插入和更新操作变慢.