ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于sequence,oracle和mysql

关于sequence,oracle和mysql

原创 Linux操作系统 作者:feilo4r 时间:2010-07-11 09:05:57 0 删除 编辑
        前天一位开发的同事让帮忙查一下某生产库上有没有某个sequence,在oracle中可以用select * from dba_sequences很轻松地去查看。但这位兄弟问的的数据库是mysql,顿时有些无语了,在我印象里mysql好像是没有sequence的概念的。问了几位mysql的DBA朋友,答复确实是没有的。既然涉及到了这个概念,也就干脆整理整理,弄清楚。
        sequence是oracle所提供的一种object,用于为多用户自动生成唯一的整数值,常见的是用于生成主键等。
        sequence number的生成和增长是不依赖于事务的commit或者rollback的。也就是说,当2个事务并发的来获取sequence number时,后一个事务不会因为前一个事务没有commit或者rollback,而获取不到number,而且获取的number是绝对不会重复。
        由于sequence是不依赖于事务的,所以sequence numbers不连续也是可以理解的。因为当获取某个number的事务被rollback掉了,该number当然也没有记录到table中去,而后续的number已经产生,不连续也是理所当然的了。
        上面整理了sequence的概念和原理,下面整理一下sequence的创建、修改和删除的语法。
        1.create sequence
        ⑴.所需权限:
        create sequence       --在自己的schema下
        create any sequence     --在所有的schmea下
        ⑵.oracle给出的语法是这样的
CREATE SEQUENCE [ schema. ]sequence
[ { INCREMENT BY | START WITH } integer    --增量值 | 开始值
| { MAXVALUE integer | NOMAXVALUE }     --最大号 | 不设置最大号
| { MINVALUE integer | NOMINVALUE }     --最小号 | 不设置最小号
| { CYCLE | NOCYCLE }              --循环 | 不循环
| { CACHE integer | NOCACHE }      
| { ORDER | NOORDER }              --顺序 | 不顺序
];
        写个实际的例子:
create sequence felix_seq_test
minvalue 1
maxvalue 99999999999
start with 1
increment by 1
cache 10;
        如果指定cache值,oracle就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况
        2.alter sequence
        可以修改某些属性
        alter sequence felix_seq_test increment by 150;
        3.drop sequence
        drop sequence felix_seq_test;
        其实sequence增删查改都简单,下面来看看sequence怎么用
        最常用的2个参数是currval和nextval,currval即显示sequence的当前值,nextval即增加sequence的值,然后显示sequence值,如:
felix_seq_test.currval
felix_seq_test.nextval  
        常用的一种insert:
insert into felix.tab_test01
  (id, code, status, date)
  (select felix.felix_seq_test.nextval, code, 1, sysdate
     from felix.tab_test
    where type = 7);

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

上一篇: ORA-29701
请登录后发表评论 登录
全部评论

注册时间:2008-09-19

  • 博文量
    33
  • 访问量
    97928