ToB企服应用市场:ToB评测及商务社交产业平台

标题: Oracle 序列学习与使用总结 [打印本页]

作者: 我可以不吃啊    时间: 2022-9-16 17:21
标题: Oracle 序列学习与使用总结
Oracle序列学习与使用总结

by:授客 QQ:1033553122
简述

序列是oracle提供的用于生成一系列数字的数据库对象,序列会自动生成顺序递增的序列号,可用于提供唯一的自动递增主键。序列和视图一样,并不占用实际的存储空间,只是在数据字典中保存他的定义信息。
创建序列

当创建序列时必须拥有create sequence 或者 create any sequence系统权限。
  1. CREATE SEQUENCE sequenceName  //创建序列名称
  2. [INCREMENT BY n]  //序列递增值 如果n是正数就递增,如果是负数则递减 默认是1
  3. [START WITH n]    //序列起始值,递增默认是minvalue 递减是maxvalue
  4. [{MAXVALUE n | NOMAXVALUE}] // 序列最大值
  5. [{MINVALUE n | NOMINVALUE}] // 序列最小值
  6. [{CYCLE | NOCYCLE}] // 是否循环,如果使用CYCLE,则当序列到达最大值(maxvalue)或者最小值(minvalue)时,重置序列起始值,并现有规则继续生成序列值。如果使用NO CYCLE 选项,那么在序列达到最大值或最小值之后,如果再试图获取下一个值将返回一个错误。
  7. [{CACHE n | NOCACHE}] // 是否预先生成序列号,并存储在内存中。n表示预生成的序列值个数。使用cache可能会跳号, 比如数据库突然不正常关闭(shutdown abort),cache中的序列号就会丢失. 所以,为了避免这种情况,无特殊需求的话,使用NOCACHE
  8. [order | noorder]; // 是否按序生成序列。order表示按序生成序列(比如第一个序列值1,第二个为2,以此类推),noorder表示不包装序列值生成顺序。
复制代码
说明:[]表示子句可选。
示例:
  1. CREATE SEQUENCE orders_seq
  2. increment By 1
  3. start With 1
  4. Maxvalue 2000
  5. Minvalue 1
  6. cycle
  7. Nocache;
复制代码
修改序列

类似创建序列,不过需要注意的是,不支持修改序列起始值。
示例:
  1. ALTER SEQUENCE orders_seq
  2. increment By 10
  3. Maxvalue 3000;
复制代码
使用序列

一旦创建了序列,就可以使用seqName.CURRVALseqName.NEXTVAL来分别获取序列的当前值和下一个序列值。
可以使用序列的地方:
不可以使用序列的地方:
示例:
  1. INSERT INTO MY_ORDER('ID', 'SEQ', 'ORDER_NO') VALUES(1, orders_seq.NEXTVAL, 'xdfkgdls20220821');
  2. SELECT orders_seq.CURRVAL FROM DUAL;
复制代码
注意:
删除序列
  1. DROP SEQUENCE seqName;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4