精华内容
下载资源
问答
  • Oracle序列创建和使用

    2019-03-04 17:36:33
    1、创建序列 语法 CREATE SEQUENCE 序列名 [相关参数] 参数说明 INCREMENT BY :序列变化的步进,负值表示递减。(默认1)START WITH:序列的初始值 。(默认1)MAXvalue:序列可生成的最大值。(默认不限制最大值,...

    1、创建序列

    • 语法 CREATE SEQUENCE 序列名 [相关参数]
    • 参数说明 

    INCREMENT BY :序列变化的步进,负值表示递减。(默认1) 
    START WITH:序列的初始值 。(默认1) 
    MAXvalue:序列可生成的最大值。(默认不限制最大值,NOMAXVALUE) 
    MINVALUE:序列可生成的最小值。(默认不限制最小值,NOMINVALUE) 
    CYCLE:用于定义当序列产生的值达到限制值后是否循环(NOCYCLE:不循环,CYCLE:循环)。 
    CACHE:表示缓存序列的个数,数据库异常终止可能会导致序列中断不连续的情况,默认值为20,如果不使用缓存可设置NOCACHE

    • 举例子

    CREATE SEQUENCE SEQ_DEMO 
    INCREMENT BY 1  
    -- 每次加1
    START WITH 1  -- 从1开始计数
    NOMAXvalue  -- 不设置最大值
    NOCYCLE  --直累加,不循环
    CACHE  50;


    2、修改、删除序列 

    • 使用alter命令修改,例:

    ALTER SEQUENCE SEQ_DEMO 
    INCREMENT BY 1

    START WITH 1  
    MAXvalue 999
    NOCYCLE 
    NOCACHE;

    • 使用drop命令删除,例:

    DROP SEQUENCE SEQ_DEMO;

    注意:

    1、如果想要改变start的值,必须 drop  sequence 再重建一个序列

    2、如果想要改变minvalue的值,必须删除序列化后再重新建立序列化。不可以修改序列化的minvalue。


    3、序列的使用 

    • currval 表示序列的当前值,新序列必须使用一次nextval 才能获取到值,否则会报错
    • nextval 表示序列的下一个值。新序列首次使用时获取的是该序列的初始值,从第二次使用时开始按照设置的步进递增
    • 查询序列的值:select seq_name.[currval,nextval] from dual;
    • SQL语句中使用:insert into table (id) values (seq_name.nextval)
    • 如果想自动一些,对表的插入操作,建立一个触发器,每当有数据插入时,触发器自动修改id值为序列的新值,这样就完全实现自增id功能了,跟mysql的自增一样。
    展开全文
  • Oracle 创建和使用序列

    2011-12-17 23:28:50
    --创建序列 create sequence seq_user start with 1 increment by 1 nomaxvalue cache 10; --使用序列 insert into user_table(user_id,user_name,user_pwd) vlaues(seq_user.nextval,'tcy','tcy'); --修改...
  • Oracle创建和使用序列

    2021-05-01 04:13:42
    Oracle创建和使用序列1 语法create sequence 序列名称2 创建序列SQL> create sequence emp_seq;Sequence created.序列是一个数据库对象,因此可以在数据字典中获得其信息。与序列相关的视图为user_objectsuser_...

    Oracle创建和使用序列

    1 语法

    create sequence 序列名称

    2 创建序列

    SQL> create sequence emp_seq;

    Sequence created.

    序列是一个数据库对象,因此可以在数据字典中获得其信息。与序列相关的视图为user_objects和user_sequences。

    SQL> col object_name format a15;

    SQL> col object_type format a15;

    SQL> col status format a15;

    SQL> select object_name, object_type, status from user_objects where lower(object_name) = 'emp_seq';

    OBJECT_NAME    OBJECT_TYPE    STATUS

    --------------- --------------- ---------------

    EMP_SEQ     SEQUENCE    VALID

    SQL> col sequence_name format a15;

    SQL> col min_value format 99999;

    SQL> col increment_by format 99999;

    SQL> select sequence_name, min_value, max_value, increment_by from user_sequences where lower(sequence_name) = 'emp_seq';

    SEQUENCE_NAME    MIN_VALUE  MAX_VALUE INCREMENT_BY

    --------------- --------- ---------- ------------

    EMP_SEQ         1 1.0000E+28        1

    3 使用序列

    在序列创建以后,要先使用nextval,然后才能使用currval。否则会报错。

    SQL> select emp_seq.nextval from dual;

    NEXTVAL

    ----------

    1

    4 指定序列初始值

    语法:

    create sequence 序列名称 start with 初始值

    获取表emp_copy的最大empno值,并利用start with创建序列

    SQL> select max(empno) from emp_copy;

    MAX(EMPNO)

    ----------

    7982

    SQL> create sequence emp_copy_seq start with 7983;

    Sequence created.

    可以利用emp_copy_seq的nextval属性作为empno给表emp_copy插值

    SQL> insert into emp_copy(empno, ename) values(emp_copy_seq.nextval, 'Li Si');

    1 row created.

    验证

    SQL> select empno, ename from emp_copy where empno = 7983;

    EMPNO ENAME

    ---------- ---------------

    7983 Li Si

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28211342/viewspace-2136860/,如需转载,请注明出处,否则将追究法律责任。

    展开全文
  • Oracle序列的概念、创建和使用

    千次阅读 2019-02-12 09:23:24
    序列产生器顺序生成数字,它可用于自动生成主键值,并能协调多行或者多表的主键操 作。没有sequence,顺序的值只能靠编写程序来生成。先找出最近产生的值然后自增长。这种方法要求一个事务级别的锁,这将导致在多...

    sequence概念及作用

    sequence是用来在多用户环境下产生唯一整数的数据库对象。序列产生器顺序生成数字,它可用于自动生成主键值,并能协调多行或者多表的主键操 作。没有sequence,顺序的值只能靠编写程序来生成。先找出最近产生的值然后自增长。这种方法要求一个事务级别的锁,这将导致在多用户并发操作的环 境下,必须有人等待下一个主键值的产生。而且此方法很容易产生主键冲突的错误,如下图: 
    这里写图片描述

    如上图,事务2会报主键冲突的错误,而再刷新一下页面(再执行一边程序),可能就正常了。 
    还有一个问题,那就是完成生成主键的程序 (一般情况包含plsql块)本身对于并发调用也是一个瓶颈,因为这样的程序段往往是提供给好多程序去调用,如果代码端写的不够优化(比如没有使用邦定变 量等等),或者此代码段存在问题,那么它所影响的是系统的全局。我们应该提倡开发人员使用sequence。sequence消除了序列化问题,而且改善 了应用的并发能力。

    创建sequence

    sequence的命名最重要的是要统一,命名规则是次要的。 
    CREATE SEQUENCE emp_sequence 
    INCREMENT BY 1 
    START WITH 1 
    NOMAXVALUE 
    NOCYCLE 
    CACHE 10; 
    这 里需要重点说明的是cache参数,它是为了应对并发访问的。cache参数告诉Oracle预先分配一个sequence numbers的集合,并且保留在内存中,以便sequence number能够被快速的访问。这个内存的大小就是cache所指定的大小,当多个用户同时访问一个sequence的时候,是在oracle SGA中读取sequence当前的合理数值,如果并发访问太大,cache的大小不够,那么就会产生sequence cache相关的等待(enq: SQ - contention),影响系统性能。
    既然cache涉及到了内存,那么就会想到oracle实例恢复的问题。如果数据库shutdown abort,sequence会如何呢?当然会有问题,sequence number保存在内存里的但是没有被应用到表中的会丢失!

    修改sequence

    除了修改sequence的starting number,你什么都能改,如果想改starting number,只能先drop然后create。 
    ALTER SEQUENCE emp_sequence 
    INCREMENT BY 10 
    MAXVALUE 10000 
    CYCLE 
    CACHE 20; 
    修 改很有用,最典型的情况是“需要把sequence 的current value改大一点,避免程序报错!”。你就可以看看current value是多少,然后修改increment by 足够大的值,然后执行.nextval,最后别忘了再将increnent by改成原来的值,还要注意做这些工作的前提是当前没有人用此sequence。

    注意:sequence与表没有关系,我们在使用的时候可以通过如下形式为每张表创建对应的sequence:seq_tablename.

    使用 sequence

    CURRVAL 和 NEXTVAL 能够在以下情况使用: 
    insert的values字句、select中的select列表、update中的set字句

    CURRVAL 和 NEXTVAL 不能够在以下情况使用: 
    子查询、视图和实体化视图的查询、带distinct的select语句、带 group by和order by的select语句、带union或intersect或minus的select语句、select中的where字句、create table与alter table中的default值、check约束条件。

    删除sequence

    drop sequence seq_a; 
    当删除sequence后,对应它的同义词会被保留,但是引用时会报错。

    oracle rac环境中的sequence

    oracle为了在rac环境下为了sequence的一致性,使用了三种锁:row cache lock、SQ锁、SV锁。 
    row cache lock的目的是在sequence指定nocache的情况下调用sequence.nextval过程中保证序列的顺序性; 
    SQ锁是应用于指定了cache+noorder的情况下调用sequence.nextval过程中。 
    SV 锁(dfs lock handel) 是调用sequence.nextval期间拥有的锁。前提是创建sequence时指定了cache 和order属性 (cache+order)。order参数的目的是为了在RAC上节点之间生成sequence的顺序得到保障。

    创建sequence赋予的cache值较小时,有enq:sq-contention等待增加的趋势。 
    cache的缺省值是20.因此创建并发访问多的sequence时,cacheh值应取大一些。否则会发生enq:sq-contention等待事件。

    rac上创建sequence时,如果指定了cache大小而赋予noorder属性,则各节点将会把不同范围的sequence值cache到内 存上。若两个节点之间都必须通过依次递增方式使用sequence,必须赋予如下的order属性(一般不需要这样做)”sql> create sequence seq_b cache 100 order”。如果是已赋予了cache+order属性的sequence,oracle使用SV锁进行同步。SV锁争用问题发生时的解决方法与sq锁 的情况相同,就是将cache 值进行适当调整。

    在RAC多节点环境下,Sequence的Cache属性对性能的影响很大。应该尽量赋予cache+noorder属性,并要给予足够的 cache值。如果需要保障顺序,必须赋予cache+order属性。但这时为了保障顺序,实例之间需要不断的交换数据。因此性能稍差。

     

    Oracle序列创建和使用

    创建序列 
    语法 CREATE SEQUENCE 序列名 [相关参数]
    参数说明 
    INCREMENT BY :序列变化的步进,负值表示递减。(默认1) 
    START WITH:序列的初始值 。(默认1) 
    MAXvalue:序列可生成的最大值。(默认不限制最大值,NOMAXVALUE) 
    MINVALUE:序列可生成的最小值。(默认不限制最小值,NOMINVALUE) 
    CYCLE:用于定义当序列产生的值达到限制值后是否循环(NOCYCLE:不循环,CYCLE:循环)。 
    CACHE:表示缓存序列的个数,数据库异常终止可能会导致序列中断不连续的情况,默认值为20,如果不使用缓存可设置NOCACHE
    例 
    CREATE SEQUENCE SEQ_DEMO 
    INCREMENT BY 1 
    START WITH 1 
    NOMAXvalue 
    NOCYCLE 
    NOCACHE;
    修改、删除序列 
    使用 alter 命令进行修改
    使用 drop 命令删除
    序列的使用 
    currval 表示序列的当前值,新序列必须使用一次nextval 才能获取到值,否则会报错
    nextval 表示序列的下一个值。新序列首次使用时获取的是该序列的初始值,从第二次使用时开始按照设置的步进递增
    查询序列的值:select seq_name.[currval,nextval] from dual;
    SQL语句中使用:insert into table (id) values (seq_name.nextval)
    --------------------- 

    seqence的作用:

    sequence号是数据库系统按照一定规则自增的数字序列,因为自增所以不会重复。目前就我所了解的sequence的作用主要有两个方面。

    一:作为代理主键,唯一识别;

    二:用于记录数据库中最新动作的语句,只要语句有动作(I/U/D等),sequence号都会随着更新,所以我们可以根据sequence号来select出更新的语句。

    sequence的用法:

    sequence和创表类似,需要创建一个sequence,然后表的一个int型字段可以使用这个sequence。

    创建一个sequence(db2,oracle均适用)

    create seqence sequence_name 

    [start with n1] 

    [increment by n2] 

    [maxvalue n3|no maxvalue] 

    [minvalue n4|no minvalue] 

    [cache n5|no cache] 

    [cycle|no cycle] 

    [order|no order]

    ----------------->n1到n5都是整数

    ----------------->start with 生成的第一个n1值

    -----------------> increment by n2 递增量,可以为正整数或负整数,指明每一次增加多少

    ----------------->maxvalue最大值,no maxvalue用于指定序列没有上限

    ----------------->minvalue 最小值,no minvalue,没有指定最小下限

    ----------------->cache 用高速缓存中可以预分配的序列号个数,默认是20。 如果缓存中的序列号没有用完就关闭数据库等其它原因. 没有使用的序列号就丢失了,所以不能保证序列号是连续的。nocache高速缓冲中不预分配序列号,每次只生成一个序列号,虽然降低了获取序列号的速度,但是可以保证序列号的连续性。

    ----------------->cycle 序列达到最大值或最小值后是否循环。再从n1开始循环,默认不no cycle

    ----------------->order用于指定按顺序生成序列,只有在RAC时需要指定,指定ORDER 是为了保证序列号是因为有请求才生成的。在使用序列号做为一个时间戳时很有用,no order是不指定按顺序生成序列(默认)。

    创建一个sequence:

    create sequence sequence_name as int minvalue 1000 maxvalue 1000000000 start with 1000 increment by 1 no cache;

    或者

    create sequence sequence_name minvalue 1000 no maxvalue start with 1000 increment by 1 no cache;

    sequence的使用:

    sequence_name.nextval ------->引用下一个序列值

    sequence_name.currval /seqence_name.nextval.currval -------->引用当前序列值,必须最少经过一个nextval才能引用currval

    在表中使用sequence:

    create table tab_name(col_int int, col_varchar varchar(20), col_seq int);

    insert tab_name into values(1, 'abc', nextval for sequence_name);   或者 insert tab_name into values(1, 'xyz', sequence_name.nextval);

    insert tab_name into values(2, 'fgh', nextval for sequence_name);   或者 insert tab_name into values(2, 'fgh', sequence_name.nextval);

    update tab_name set col_varchar='678', col_seq=sequence_name.nextval where col_int=2; 

    delete tab_name col_sql=sequence_name.nextval where col_int=1;

    单独使用查询sequence:

    select sequence_name.nextval from dual; ------>每执行一次sequence号会一直增加

    select sequence_name.currval from dual; ------->执行多少次都不会变化

    改变sequence:

    比如对以上创建的sequence除了初始值以外的值进行修改,alter sequence_name minvalue 100000 maxvalue 99999999 increment by 10 cache 10 cycle;

    删除sequence:

    drop sequence sequence_name;


    利用解发器自动为表插入递增序列:---类似自增字段的作用

    建解发器代码为:
    create or replace trigger trigger_id
    before insert on tabname
    for each row
    declare
    nextid number;
    begin
    IF :new.col_seq IS NULL or :new.col_seq=0 THEN
    select sequence_name.nextval
    into nextid from sys.dual;
    :new.col_seq:=nextid;
    end IF;
    end trigger_id;
    或者

    create trigger trigger_id before
    insert on tabname
    for each row 

    begin
    select sequence_name.nextval 
    into:new.col_seq 
    from dual;
    end trigger_id;

    或者

    create or replace trigger trigger_id
    before insert or update of col_seq
    on tabname
    for each row
    begin
    if inserting then
    select sequen_name.nextval into:new.col_seq from dual;
    slse
    raise_application_error(-20020, '不允许更新ID值!');
    end if;
    end;
    --------------------- 

    转自:http://www.blogjava.net/tomjamescn/archive/2009/08/30/293167.htmlhttps://blog.csdn.net/u013187074/article/details/52818616 
    https://blog.csdn.net/hu_dongyang/article/details/79039737 

    展开全文
  • Oracle序列创建和使用(id自增长)

    千次阅读 2019-03-15 16:14:15
    oracle创建主键自增长表需要三个步骤: 创建表 CREATE TABLE STUDENT( ID NUMBER NOT NULL, NAME VARCHAR2(4000) NOT NULL, PRIMARY KEY(ID) ) 创建序列 CREATE SEQUENCE SEQUENCE_STUDENT_ID MINVALUE 1 ...

    oracle创建主键自增长表需要三个步骤:

    创建表

    CREATE TABLE STUDENT(
      ID NUMBER NOT NULL,
      NAME VARCHAR2(4000) NOT NULL,
      PRIMARY KEY(ID)
    )

    创建序列

    CREATE SEQUENCE SEQUENCE_STUDENT_ID MINVALUE 1 NOMAXVALUE INCREMENT BY 1 START WITH 1 NOCACHE;

    创建触发器

    CREATE OR REPLACE TRIGGER TRG_ON_INS_STUDENT BEFORE INSERT ON STUDENT FOR EACH ROW WHEN(NEW.ID IS NULL)
    BEGIN
      SELECT SEQUENCE_STUDENT_ID.NEXTVAL INTO :NEW.ID FROM DUAL;
    END;
    

    验证:插入数据

    INSERT INTO STUDENT(name) values ('Hello');

    可以很简单的Drop Sequence 

    DROP SEQUENCE SEQUENCE_STUDENT_ID; 

    #查看已存在的序列

    select * from user_sequences;
    如果需要查看某个特定的序列,如下:(注意:区分大小写)
    select * from user_sequences  where  sequence_name like '%T_SELL_BRAND%';
    select * from user_sequences  where  sequence_name='SEQ_T_SELL_BRAND';

    Oracle的数据添加默认值 (alter table table_name modify column_name default 0;)

    alter table PERSON modify AGE default 0;

    SQL注释:

    创建序列 

    • 语法 CREATE SEQUENCE 序列名 [相关参数]
    • 参数说明 

        INCREMENT BY :序列变化的步进,负值表示递减。(默认1) 
        START WITH:序列的初始值 。(默认1) 
        MAXvalue:序列可生成的最大值。(默认不限制最大值,NOMAXVALUE) 
        MINVALUE:序列可生成的最小值。(默认不限制最小值,NOMINVALUE) 
        CYCLE:用于定义当序列产生的值达到限制值后是否循环(NOCYCLE:不循环,CYCLE:循环)。 
        CACHE:表示缓存序列的个数,数据库异常终止可能会导致序列中断不连续的情况,默认值为20,如果不使用缓存可设       置  NOCACHE

    • 例 

        CREATE SEQUENCE SEQ_DEMO 
        INCREMENT BY 1 
        START WITH 1 
        NOMAXvalue 
        NOCYCLE 
        NOCACHE;

    • 修改、删除序列 

            使用 alter 命令进行修改

            使用 drop 命令删除

    • 序列的使用 

            currval 表示序列的当前值,新序列必须使用一次nextval 才能获取到值,否则会报错

            nextval 表示序列的下一个值。新序列首次使用时获取的是该序列的初始值,从第二次使用时开始按照设置的步进递增

            查询序列的值:select seq_name.[currval,nextval] from dual;

           SQL语句中使用:insert into table (id) values (seq_name.nextval)

    展开全文
  • 创建序列create sequence seq_a minvalue 1000 maxvalue 99999999 start with 1000 increment by 1 nocache;查询序列select seq_a.nextval from dual;为每张表生成对应的序列--创建存储过程create or replace ...
  • oracle创建序列序列补零实例详解 我们经常会在在DB中创建序列: -- Create sequence create sequence COMMON_SEQ minvalue 1 maxvalue 999999999 start with 1 increment by 1 cache 20 cycle; 我们的序列的...
  • Oracle序列创建 CREATE SEQUENCE 序列名 [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE|NOCYCLE}] [{CACHE n| NOCACHE}]; 参数说明: INCREMENT BY- - 序列...
  • 给大家分享MyBatis Oracle 自增序列的实现方法及mybatis配置oracle的主键自增长的方法,非常不错具有一定的参考借鉴价值,感兴趣的朋友一起看看吧
  • MySQL实现类似Oracle的序列...Oracle序列使用,无非是使用.nextval.currval伪列,基本想法是: 1、MySQL中新建表,用于存储序列名称值; 2、创建函数,用于获取序列表中的值; 具体如下: 表结构为:  drop tabl
  • 创建序列的语法 – create sequence Student_stuId_Seq // 序列名 increment by 1 //自增1 start with 1 //从1开始 minvalue 1 //最小1 maxvalue 999999999; // 最大值可以不设置 NOCYCLE --不循环 CACHE 10 --...
  • oracle 创建id主键序列的 脚本 及 使用方式 oracle 创建id主键序列的 脚本 及 使用方式
  • Oracle序列创建使用(txt文本),Oracle序列创建使用(txt文本),Oracle序列创建使用(txt文本)
  • 1.oracle是通过序列(sequence)来处理自动增长列 用法: create sequense my_seq //创建序列名:my_seq start with 1 //从1开始 increment by 1 //每次增长1 maxvalue 999999 //nomaxvalue(不设置最大值) ---最大值 ...
  • Oracle使用序列创建自增字段,自增长列。
  • oracle 如何创建序列使用数据库命令如何创建,绝对好用
  • oracle序列创建同义词

    2021-05-06 00:46:04
    connect 是使用 oracle 的简单权限,这种权限只有在对其他 用户的表有访问权 时, 包括 select、 insert、 update delete 等, 才会变得有意义。 拥有 connect role 的用户还能够创建表、视图、序列(sequence)、簇...
  • 创建序列的语法是: 语法结构:创建序列 CREATE SEQUENCE sequence_name [START WITH num] [INCREMENT BY increment] [MAXVALUE num|NOMAXVALUE] [MINVALUE num|NOMINVALUE] [CYCLE|NOCYCLE] [CACHE num|NOCACHE] ...
  • oracle 序列创建和使用

    2013-06-01 14:22:14
    序列的概念和使用 点评:主键尽量使用序列发生!rac的情况考虑 order属性! 该实验的目的是操作序列,使用序列进行插入操作。 Sequence 序列 序列是一类对象 它可以自动的产生唯一的整数 通常用来产生主健;的值...
  • Oracle序列(sequence)是一种数据库项,...Oracle序列使用教程:1、创建序列:CREATE SEQUENCE sequence_name[START WITH start_num][INCREMENT BY increment_num][{MAXVALUE maximum_num|NOMAXVALUE}][{MINVALUE min...
  • 1、序列的创建与说明创建序列,Oracle序列的语法格式为:CREATE SEQUENCE 序列名[INCREMENT BY n][START WITH n][{MAXVALUE/ MINVALUE n|NOMAXVALUE}][{CYCLE|NOCYCLE}][{CACHE n|NOCACHE}];1)INCREMENT BY用于定义...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 87,335
精华内容 34,934
关键字:

oracle序列创建和使用