Oracle中的小序列
admin
2023-04-22 15:23:19
0

    话说序列很少人知道,因为Mysql和sql server都有自动增长字段(如ID主键自动增长的整数),而Oracle却没有提供该用法,那么Oracle提供了更加灵活方便的策略-建立对象序列

    序列创建之后也是真真实实存在的,存在我们的磁盘上,并可以适用场合调用,序列总是从指定的长度开始,创建了之后可以按照指定步长进行累加,获得新的整数

    格式:

        create sequence emp_seq

    解释:

        创建一个序列,经常会用后缀seq来识别的

    格式:

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

    解释:

        竟然是正儿八经存在的对象,那么我们就可以通过数据库user_objects.

    格式:

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

    解释:

        用来查看我们创建的序列详细信息的,我们通过这个突然发现,还能看最大值,最小值,每次增长的步长.

  使用序列

      创建不用等于白创,那么使用前先要理解两个值,第一个currval,第二个nextval,从英语意思来看也很清晰,currval获取当前值,nextval获取下一个值,每次调用nextval都会使当前的序列增加单位步长(默认是1)

      调用序列这两个属性方法为seq.currval和seq.nextval,第一次使用序列,注意哈,要先调用next的属性,否则会报错的!

    格式:

        select emp_seq.nextval from dual;

    解释:

        我们用虚表dual来作为seq.nextval的from源,单行输出显示,这时候结果会是1.

  因为nextval的值是默认整张的,所以我们要保证表ID为主键

     格式:

        alter table student_name modify(id number primary key);

     格式:

        insert into student(id,name) values(emp_seq,'你好',);

     解释:

        假如student表中已有数据,我们插入id时候直接调用创建的序列你会惊奇的发现,失败!!!怎么回事,我们用select emp_seq.currval from dual;--发现数据是2,表中已经有2了当然不行了,怎么办也不可能把原有的数据(这一列删除掉),数据量小还可以用用,麻烦不说,显示不出序列的威力!下面我们介绍怎么设置初始值,加入本表id值已经1000条数据,我们让他从1000开始默认自增不是更好更高效!

     格式:

        drop sequence emp_seq;--删除原来的序列

        create sequence emp_seq start with 1001;

     解释:

        关键词start with 英语单词理解就是起始,那么意思就是说这个序列从1001开始自动增加(默认是1),插入的时候起始值是1001这样就可以根据我们的需求来使用序列,是不是很方便简单高效。

     格式:

        alter sequence emp_seq minvalue 8888;--修改最小值,注意当前修改的最小值不能大于原表中的数值(1001)!!

        alter sequence emp_seq maxvalue 9999;--修改最大只

    格式:

        alter sequence emp_seq increment by 5;

    解释:

        这就是我们前面一直给大家提到的默认增长的步调,就是说每一次插入id值默认自动增长多少。

        这个地方要注意设置最大值的问题,如果我最大值是20的话,从1开始每次增加5,最大只能到17,第四次就会超出最大值报错,这个的话大家一下就会明白。

        那么当我超出最大值就不可以,超出最大值就让他变成最小值,重新循环,可以的,我们是操控者,只要我们愿意,他就得可以,下面介绍一个关键字来替我们去执行这个操作。

    格式:

        create sequence emp_seq

        start with 5

        minvalue 1

        maxvalue 30

        incremenet by 1

        /--创建结束

    这时候我们算是吧前面学的参数都用上了,看一看其实也很简单啊,么点难度,我们开始多次nextval属性值,直到用currval看当前值最大值为30,当我们在使用nextval的时候就会神奇的发现变成了1.

    格式:

        alter sequence emp_seq cycle;--开启

        alter sequence emp_sql nocycle;--关闭

    缓存,什么是缓存,缓存是更好的读数据,速度比内存都要快很多,那么序列也有缓存,大量数据能有缓存效果对于数据库整体来说无疑是一个性能极大的提升。

        那么序列的cache,每次利用nextval,并非直接操作,而一次性获取多个列表的缓存,从缓存中抓取数值,而且依赖于currval和步长increment.

        定义存放序列的内存块的大小,预先生成序列号,存放在内存块当中,用下一个序号给予快速的相应,可以更快的响应,当一组用完之后会再生成一组,这样可以提高生成序列号的效率,默认值20。

        格式:

            alter sequence emp_seq cache 10;

        解释:

            设置缓存区大小

    昨天在工作中,在表中添加了一个序列id,当时数据量比较小,利用表格然后插入到数据表列,如果数据量这个方法不可行而且特别麻烦,那么今天学习的序列就派上了大用场!

    小序列并不简单,能用好、用到正地方确实要很大学问,希望大家一起学以致用多多实战。


相关内容

热门资讯

被科威特指控“武装渗透”布比延... 新华社科威特城/德黑兰5月12日电(记者尹炣 陈霄)科威特政府12日指认,伊朗伊斯兰革命卫队多名武装...
酒吧办护士制服派对被指低俗,当... 据媒体报道,5月12日国际护士节,浙江衢州有网友发帖称,当地APK·ELITE CLUB酒吧举办所谓...
珠海冠宇获得发明专利授权:“一... 证券之星消息,根据天眼查APP数据显示珠海冠宇(688772)新获得一项发明专利授权,专利名为“一种...
大华申请数据写入方法专利,提高... 国家知识产权局信息显示,浙江大华技术股份有限公司申请一项名为“数据写入方法、电子设备及计算机可读存储...
现在,赖清德更焦虑了 执笔/月半刀&宝刀刀&胡一刀5月13日,美国总统特朗普将开启访华行程。外界高度关注此次会晤中双方将如...
燃气发电与电池储能相结合,成为... 来源:市场资讯 (来源:i商周) 孟菲斯一座xAI数据中心的燃气轮机 人工智能的用电飙升,让数据中心...
景嘉微:JM11性能大幅提升,... 有投资者在互动平台向景嘉微提问:“董秘您好!关注到近期有用户反馈公司JM11显卡推出了适配windo...
原创 v... 影像的发展进一步推动,不少品牌推出了专业影像手机,拥有2亿像素摄像头、色彩还原摄像头、影像芯片、影像...
荣耀首款自研耳夹式耳机官宣即将... 快科技5月13日消息,日前,荣耀首席营销官关海涛宣布,荣耀全场景团队自研首款耳夹式耳机马上上市,并称...
谷歌推出Googlebooks... IT之家 5 月 13 日消息,2026 年 I/O 开发者大会下周(5 月 19~20 日)召开之...