设为首页 收藏本站
查看: 832|回复: 0

[经验分享] Oracle中的小序列

[复制链接]

尚未签到

发表于 2018-9-6 06:17:25 | 显示全部楼层 |阅读模式
  话说序列很少人知道,因为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为主键
  格式:

  >  格式:
  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,当时数据量比较小,利用表格然后插入到数据表列,如果数据量这个方法不可行而且特别麻烦,那么今天学习的序列就派上了大用场!
  小序列并不简单,能用好、用到正地方确实要很大学问,希望大家一起学以致用多多实战。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-563700-1-1.html 上篇帖子: 12c Oracle 定期验证备份文件 下篇帖子: oracle中的dblink ——基本操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表