zoukankan      html  css  js  c++  java
  • [Oracle] 浅谈Sequence

    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生成主键。
  • 相关阅读:
    看MySQL官方文档的示例SQL有感
    MySQL 主外键约束与标准SQL不同的地方
    pip安装包时遇到的Bug
    MySQL update 语句与标准SQL不同的地方
    让MySQL在美国标准下运行
    mysqlslap 压力测试工具
    django 自动化测试的故障排查
    mysql-8.0.11 比较坑的地方dba门要淡定
    python3 如何给装饰器传递参数
    python3 装饰器应用举例
  • 原文地址:https://www.cnblogs.com/aukle/p/3230785.html
Copyright © 2011-2022 走看看