`
mamaoyuan625
  • 浏览: 176940 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Oracle中的序列--sequence

阅读更多

1:语法:

create sequence <序列名称>
         start with <
起始数>
         increment by <
增长量>
         [maxvalue  
]
         [minvalue  
]
         [cycle 
当到达最大值的时候,将继续从头开始]
         [Nocycle  -- 
一直累加,不循环]  
      [Cache ]

2:建表

create table t1( id number(10) primary key, name varchar2(8) ); drop sequence seq1; create sequence seq1; insert into t1(id,name) values(seq1.nextval,'a'); insert into t1(id,name) values(seq1.nextval,'b'); insert into t1(id,name) values(seq1.nextval,'c');


  

 

--提交

commit;

 

select * from t1;

ID

NAME

1

a

2

b

3

c

 

注意,没有自动编号类型。

 

序列是否能连续

insert into t1(id,name) values(seq1.nextval,'dddddddddddddddddddddddddd');

--ORA-01401: 插入的值对于列过大

 

insert into t1(id,name) values(seq1.nextval,'dd');

--问题:dd的编号是几?

 

select * from t1;

ID

NAME

1

a

2

b

3

c

5

dd

 

思考:为什么会是5,而不是4

 

小结:序列有个特性,每个值只能返回一次。而管这个值用在什么地方。

      序列就象一个变局变量(重启以后仍存在,因为序列也是数据库对象),可以用在任何地方,所以与表其实没有关系(可以多个表用一个序列)

 

select seq1.nextval x from dual;

X

7

insert into t1(id,name) values(seq1.nextval,e);

--ORA-00984: 列在此处不允许

 

insert into t1(id,name) values(seq1.nextval,'e');

select * from t1;

ID

NAME

1

a

2

b

3

c

5

dd

8

e

 

分析:sql有语法错误,所以seq1.nextval没有执行,所以值没有用掉。

 

 

3:序列当前值

select seq1.nextval from dual;

--必须先执行nextval以后,currval才能调用。

select seq1.currval from dual;

第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值

 

4:如何修改序列

  修改前提是sequence owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alterstart至以外的所有sequence参数.如果想要改变start值,必须 drop sequence  re-create .
  
 
  
  影响Sequence的初始化参数:
SEQUENCE_CACHE_ENTRIES =
设置能同时被cachesequence数目。

也可以这样
alter sequence mySeq maxvalue 500
注意:不能改start with,其他随便改(设置minvalue值的时候不能大于当前值)

 Alter sequence 的例子:  ALTER SEQUENCE emp_sequence   INCREMENT BY 10   MAXvalue 10000   CYCLE   -- 到10000后从头开始  NOCACHE

 


 

 

 

 

分享到:
评论

相关推荐

    Oracle sequence 重置(失效恢复)

    **Oracle Sequence** 是一种数据库对象,用于生成连续的整数序列。它可以被用来作为表中某一列的自动增长字段,例如主键ID。Sequence的主要优点是简单易用且性能高效。 #### 二、Sequence失效的原因 1. **数据迁移...

    Oracle实验二-SQL语句综合应用

    在本实验中,我们主要探讨了Oracle数据库中的SQL语句应用,涉及到了表、视图、索引以及序列等核心概念。以下是对这些知识点的详细解释: 1. **创建表**: - 使用`CREATE TABLE`语句创建了一个名为`person`的表,...

    oracle中的sequence实现主键增长

    Oracle中的Sequence是数据库管理系统提供的一种机制,用于生成序列化的整数,通常用于主键或唯一标识符,确保数据的唯一性和有序性。在Oracle中,Sequence不同于其他数据库系统的自增字段,例如SQL Server中的`...

    OracleSQL实例-序列的再创建实例.pdf

    在这个实例中,我们将深入理解如何创建、使用和管理Oracle序列,以及如何处理序列的缓存问题。 首先,我们看到用户"SCOTT"在执行SQL命令来创建两个序列——seq_emp 和 seq_dept,它们都从1开始计数。`CREATE ...

    oracle中sequence介绍及应用

    在Oracle数据库中,Sequence是一种用于自动产生数值序列的对象。它可以生成连续的整数或者非连续的整数序列,并且可以根据需求进行递增或递减。Sequence常用于为表中的某列自动生成唯一的主键值或者作为流水号使用。...

    Oracle数据库中序列的使用

    ### Oracle数据库中序列的使用 在Oracle数据库管理中,序列是一种非常实用的对象,它能够自动生成唯一的数值。这种特性使得序列在很多应用场景中都极为重要,比如为表中的记录自动分配唯一标识符(如主键)。本文将...

    oracle 不用新建序列 重置序列(从1开始增长)

    本文将详细介绍如何在不新建序列的情况下,实现Oracle序列的重置,让其从1开始增长。这种方法通过编写PL/SQL过程来动态调整序列的增量,从而达到重置的目的。 ### Oracle序列重置方法 首先,我们需要理解Oracle...

    java通过Mysql实现类似oracle序列功能序列.rar

    在Java应用程序中,如果需要在MySQL环境中实现类似Oracle序列的功能,我们需要自己设计解决方案。以下是一些关键知识点的详细说明: 1. **Java连接MySQL**: - 首先,你需要使用JDBC(Java Database Connectivity...

    mysql生成oracle序列

    为了在MySQL中实现类似于Oracle序列的功能,可以通过创建一张特殊的表和几个自定义函数来实现。这种方法可以有效地模拟Oracle序列的行为,并能够根据指定的步长和长度来生成数值。 ##### 2.1 创建模拟序列的表 在...

    oracle序列创建、修改、删除

    在本篇中,我们将深入探讨Oracle序列的创建、修改和删除。 ### 1. 序列的创建 创建序列的基本语法如下: ```sql CREATE SEQUENCE sequence_name START WITH n -- 起始值 INCREMENT BY n -- 增量值 MINVALUE n ...

    oracle 建表 建序列

    ### Oracle 创建表与序列知识点详解 #### 一、Oracle创建表的基本语法与示例解析 在Oracle数据库中,创建表是进行数据管理的基础操作之一。下面将通过几个具体实例来详细解析创建表的过程。 ##### 示例1:创建...

    分享ORACLE SEQUENCE跳号总结

    在ORACLE数据库中,序列(SEQUENCE)是使用非常频繁的一个数据库对象,但是有时候会遇到序列(SEQUECNE)跳号(skip sequence numbers)的情形,那么在哪些情形下会遇到跳号呢?  事务回滚引起的跳号  不管序列有...

    Oracle开发技术--整理

    - 序列(Sequence):自增或自减的数字序列,常用于生成唯一ID。 - 索引(Index):提高数据检索速度的数据结构。 - 同义词(Synonym):为数据库对象提供一个别名,方便访问。 - 程序(Procedure, Function, ...

    oracle自增序列

    本文将详细介绍如何在Oracle数据库中创建自增序列,并深入探讨其相关属性和应用场景。 #### 一、什么是Oracle自增序列? Oracle自增序列是一种特殊类型的序列,它可以按照设定的规则自动生成一系列连续的数字。...

    oracle通过触发器,实现序列自增

    #### 一、理解Oracle序列 在开始之前,首先需要了解Oracle中的序列。序列是一个数据库对象,它能够生成连续的整数序列。序列主要用于当需要为表中的某列自动生成唯一值时。例如,在插入新记录时,可以使用序列生成...

    浅谈MyBatis-Plus学习之Oracle的主键Sequence设置的方法

    为了实现Sequence,我们需要在Oracle数据库中创建一个序列对象,例如: ```sql CREATE SEQUENCE seq_user START WITH 1; ``` 这里创建了一个名为`seq_user`的Sequence,从1开始递增。 2. **配置MyBatis-Plus*...

    Oracle使用序列创建自增字段

    Oracle 数据库通过序列(Sequence)这一特性支持自增字段的实现。本文将详细介绍如何利用 Oracle 的序列功能来创建自增字段,并探讨其相关的配置选项及应用场景。 ### 创建序列 (Create Sequence) #### 基本语法与...

    Oracle 序列

    Oracle序列是数据库中用于生成唯一标识符的一种机制,它们在数据表中经常被用来作为主键或外键,确保数据的唯一性和完整性。在Oracle数据库系统中,序列(Sequences)提供了一种自动递增或递减数值的方式,这对于...

    ORACLE SEQUENCE的简单介绍

    为了在 Oracle 中使用 Sequence,首先需要确保拥有相应的权限,通常是 `CREATE SEQUENCE` 或者 `CREATE ANY SEQUENCE` 权限。创建 Sequence 的基本语法如下: ```sql CREATE SEQUENCE sequence_name INCREMENT BY ...

Global site tag (gtag.js) - Google Analytics