阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle 序列创建及使用

103次阅读
没有评论

共计 1997 个字符,预计需要花费 5 分钟才能阅读完成。

1.Oracle 是通过序列 (sequence) 来处理自动增长列

用法:

create sequence my_seq   --创建序列名:my_seq
start with 1  --从 1 开始
increment by 1  --每次增长 1 
maxvalue 999999  --nomaxvalue(不设置最大值) --- 最大值
minvalue 1  --最小值
cycle  --nocycle   一直累加,不循环;cycle 表示循环
nocache   --缓存
cache 10 --表示一次产生 10 个号,

// 但是使用缓存产生号,优点是提高效率,缺点是可能产生跳号
// 上面表示从 1 开始,每次增长 1,最大值为 999999,之后又循环开始

— 创建表

create table test1(id number primary key ,name varchar2(32));
insert into test1 values(myseq.nextval,'abc');
insert into test1 values(myseq.nextval,'bdc');

(1)可以为表中的列自动产生值
(2) 由用户创建数据库对象,并可由多个用户共享
比如:system 用户使用 scott 创建的序列,从什么开始增长?
答:接着 scott 里面的增长
(3) 一般用于主键或唯一列

2. 序列细节说明:
一旦定义了某个序列,可以使用 currval,nextval
currval: 返回 sequence 的当前值
nextval:返回增加 sequence 的值,然后返回 sequence 的值
比如:
序列名.currval:select 方案名. 序列名.currval from dual;// 用于查看当前序列是多少
序列名.nextval:select 方案名. 序列名.nextval from dual;// 用于查看当前序列的下一个值是多少
【什么时候使用 sequence】
①不包含子查询,snapshot,view 的 select 语句【用的少】
②insert 语句的子查询中【用的较多】
③insert 语句的 values 中【用的多】
④update 的 set 中【用的较多】

3:使用 sequence 注意事项:
①currval 总是返回当前 sequence 的值,只有在第一次 nextval 初始化后,才能使用 currval,
否则会出错。每使用一次 nextval,就会增加一次 sequence 的值,同一个语句里面要是有多个 nextval,其数值就是不一样的
②第一次 nextval 返回的值是初始值:随后的 nextval 会自动增加定义的 increment by 值,然后
返回增加后的值
③如果指定 cache 值,oracle 就可以预先在内存里面放置一些 sequence,这样存取会更快,
cache 里面取完后,oracle 自动再取一组到 cache,使用 cache 或许会跳号,比如数据库突然不正常
down 掉,cache 中的 sequence 就会丢失,可以在定义 sequence 的时候,使用 nocache 防止这种情况

再来一个在 MyBatis 中使用的例子

CREATE SEQUENCE SEQ_TARGETDB
MINVALUE 1
MAXVALUE 99999999
START WITH 1
INCREMENT BY 1
NOCYCLE
CACHE 10;
 
<insert id="add" parameterType="targetDbTO">

        <selectKey resultType="java.lang.Long" keyProperty="tdId" order="BEFORE">

            select SEQ_TARGETDB.NEXTVAL as id from dual

        </selectKey>

        insert into target_db (td_id,td_name,td_maxsize,td_size,td_type,

            server_ip,server_port,create_dt,create_by,delflag,remark) 

            values (#{tdId,jdbcType=BIGINT},#{tdName,jdbcType=VARCHAR},#{tdMaxsize,jdbcType=BIGINT},

            #{tdSize,jdbcType=BIGINT},#{tdType,jdbcType=BIGINT},

            #{serverIp,jdbcType=VARCHAR},#{serverPort,jdbcType=VARCHAR},

            sysdate,#{createBy,jdbcType=BIGINT},0,#{remark,jdbcType=VARCHAR})

    </insert>

更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149451.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1997字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中