Oracle的Sequence是一种数据库对象,它可以生成有序数字,主要用于主键的自动生成。如果没有Sequence,主键的自动生成必须得在代码逻辑里实现,大致过程是:获取当前主键值,新主键值=当前主键值+增量。如果多个用户同时请求新主键,则会产生并发等待,影响效率,Sequence就是用来解决这个问题。

创建Sequence

CREATE SEQUENCE emp_sequence
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
CACHE 10;

上面大部分的名词不需要过多解释,只要懂英文的人一看就知道什么意思,唯一需要解释的是CACHE,它是指在内存SGA中缓存的数量,主要是出于性能方面的考虑。关于CACHE还有一点需要注意:如果数据库实例异常宕机,会导致内存中的CACHE值丢失,数据库恢复时,将跳过这些CACHE。

修改Sequence

ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXVALUE 10000
CYCLE
CACHE 20;

语法和创建Seqence差不多,不用过多解释。

使用Sequence

CURRVAL - Sequence当前值,可多次使用,不会自增长;
NEXTVAL - Sequence下一个值,每使用一次,都会触发一次自增长。

Sequence可以用在insert, update, select中:

INSERT INTO Line_items_tab (Orderno, Partno, Quantity)
VALUES (Order_seq.CURRVAL, 20321, 3);
UPDATE Orders_tab
SET Orderno = Order_seq.NEXTVAL
WHERE Orderno = 10112;
SELECT Order_seq.NEXTVAL FROM dual;

删除Sequence

DROP SEQUENCE order_seq;

实现自动递增列

Oracle不支持实现自动递增列,即不能够把Sequence做为默认值放在列的属性里,但可以通过触发器实现,设置好触发器之后,所有的插入语句,将忽略传入的主键,只使用指定的Sequence生成主键。

最新文章

  1. 【TJOI&HEOI2016】【Bzoj4551】树
  2. CoreData教程
  3. C#开发Windows服务 入门
  4. scala 学习之:List fold, foldLeft方法
  5. AndRoid studio创建APP图标
  6. Linux 挂载 NFS
  7. 浅谈scrum站立会议
  8. 【ubuntu】首选项和应用程序命令(preference & application)
  9. GBrowse配置相关资料
  10. 瀑布流ListView
  11. wap网站seo如何优化呢?
  12. IP工具类——IpAddress.java
  13. 元素重叠及position定位的z-index顺序
  14. 2016NEFU集训第n+3场 E - New Reform
  15. PHP 性能追踪及分析工具(XHPROF)
  16. java 生成txt文件
  17. C# 方法参数 out、ref、param 详解
  18. [VUE ERROR] Invalid prop: type check failed for prop "list". Expected Array, got Undefined
  19. DataTables 1.10.x与1.9.x参数名对照表
  20. vue教程1-04 事件 v-on:click="函数"

热门文章

  1. 基于jquery的页面预载入效果(loading)
  2. discuz 和 wordpress 整合注意问题
  3. Java was started but returned exit code=13
  4. 转:Gulp的目标是取代Grunt
  5. Android隐藏标题栏
  6. WebAPI 用户认证防篡改实现HMAC(二)签名验证 AbsBaseAuthenticationAttribute--转
  7. BZOJ3300: [USACO2011 Feb]Best Parenthesis
  8. 设计模式 ( 二十一 ):Vistor访问者模式 -- 行为型
  9. apue
  10. [Android开发常见问题-14] Unexpected namespace prefix "abc" found for tag SomeThing