Oracle 主键自增

说明:第一次做项目使用oracle发现无法像mysql那样在客户端设置主键自增长,oracle必须使用语句生成序列。

(细节:oracle想要主键自增,必须创建序列,在所用的框架(已myBatis举例),加上SENDCOLLNOTICEID.nextval(序列名.nextval)

创建触发器则不用改框架的配置文件。再同一个数据库中所有的序列和触发器名称是禁止重复的。一张表中的序列叫ID,另一张表中的序列就不能再叫ID,触发器也一样,不能重复)


创建oracle 序列语句

CREATE SEQUENCE SENDCOLLNOTICEID -- SENDCOLLNOTICEID这个就是后面要用到这个序列号时引用的名称

INCREMENT BY 1  -- 每次加几个

START WITH 1   -- 从1开始计数

NOMAXVALUE   -- 不设置最大值

NOCYCLE     -- 一直累加,不循环

--CACHE 100;         -- 缓存值 100==========不理解缓存值一般不使用                

再myBatis 中使用序列方法:

<insert id="insertSelective" parameterType="com.test.entity.TF_NOTICE">

   insert into TF_NOTICE

   <trim prefix="("suffix=")" suffixOverrides=",">

        REPLY_ID ,<!-- 主键id/或者自增的列。序列的使用方法 -->

     <if test="suffId !=null" >

       NOTICE_ID,

     </if>

   </trim>

   <trim prefix="values ("suffix=")" suffixOverrides=",">

         SENDCOLLNOTICEID.nextval,<!-- 序列的使用方法 -->

     <if test="noticeId!=null" >

        #{noticeId,jdbcType=DECIMAL},

     </if>

   </trim>

 </insert>



创建 oracle触发器语句

--CFQ_TF_SEARCH_REPLY  触发器名称

--TF_NOTICE                      表名

-- REPLY_ID                        主键

--SENDCOLLNOTICEID      序列名

create triggerCFQ_TF_SEARCH_REPLY  before

insert on TF_REPLY  for each row when (new.REPLY_ID is null)

begin

select SENDCOLLNOTICEID.nextval into:new.REPLY_ID  from dual;

 end;



猜你喜欢

转载自blog.csdn.net/IT_NQR/article/details/80014611