精华内容
下载资源
问答
  • 给大家分享MyBatis Oracle 自增序列的实现方法及mybatis配置oracle的主键自增长的方法,非常不错具有一定的参考借鉴价值,感兴趣的朋友一起看看吧
  • oracle创建自增序列

    千次阅读 2019-11-15 21:45:14
    Oracle中,当需要建立一个自增字段时,需要用到sequence。sequence也可以在mysql中使用,但是有些差别,日后再补充,先把oracle中sequence的基本使用总结一下,方便日后查阅。 在oracle中sequence就是序号,每次取...

     Oracle中,当需要建立一个自增字段时,需要用到sequence。sequence也可以在mysql中使用,但是有些差别,日后再补充,先把oracle中sequence的基本使用总结一下,方便日后查阅。

    在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。

     

    1. Create Sequence

        首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限。

        创建语句如下:

    CREATE SEQUENCE seqTest

    INCREMENT BY 1 -- 每次加几个

    START WITH 1 -- 从1开始计数

    NOMAXvalue -- 不设置最大值

    NOCYCLE -- 一直累加,不循环

    CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE

     

    说明:

     minvalue:序列最小值

     maxvalue/nomaxvalue:序列最大值/没有最大值

     start with 1:序列从1开始

     increment by 1:每次增加1

     cache/nocache:nocache不缓存。cache缓存。开启缓存,效率高,只是如果数据库宕机了,缓存丢失,会出现序列跳号情况。

     

    2.查看已有sequence:

    select * from user_sequences; 

    Select * from all_sequences;

    3.得到Sequence值

    两种方式

    ① select last_number from user_sequences where sequence_name='SEQ_ON_USER';  

    ② select SEQ_ON_USER.nextval from sys.dual;  

     

    定义好sequence后,你就可以用currVal,nextVal取得值。

        CurrVal:返回 sequence的当前值

        NextVal:增加sequence的值,然后返回 增加后sequence值

      得到值语句如下:

    SELECT Sequence名称.CurrVal FROM DUAL;

      如得到上边创建Sequence值的语句为:

    select seqtest.currval from dual

     

    在Sql语句中可以使用sequence的地方:

        - 不包含子查询、snapshot、VIEW的 SELECT 语句

        - INSERT语句的子查询中

        - INSERT语句的values中

        - UPDATE 的 SET中

     

    如在插入语句中

    insert into 表名(id,name)values(seqtest.Nextval,'sequence 插入测试');

     

     注:

        - 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。

          CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。

           一次NEXTVAL会增加一次 SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。

        - 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组 到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。

     

    4.Alter Sequence

        拥有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create。

    例:

    alter sequence SEQTEST maxvalue 9999999;

        另: SEQUENCE_CACHE_ENTRIES参数,设置能同时被cache的sequence数目。

     

    5.Drop Sequence

    DROP SEQUENCE seqTest;

    6. 一个例子

    create sequence SEQ_ID

    minvalue 1

    maxvalue 99999999

    start with 1

    increment by 1

    nocache

    order;

     

    建解发器代码为:

    create or replace trigger tri_test_id

      before insert on S_Depart   --S_Depart 是表名

      for each row

    declare

      nextid number;

    begin

      IF :new.DepartId IS NULLor :new.DepartId=0 THEN --DepartId是列名

        select SEQ_ID.nextval --SEQ_ID正是刚才创建的

        into nextid

        from sys.dual;

        :new.DepartId:=nextid;

      end if;

    end tri_test_id;

     

    上面的代码就可以实现自动递增的功能了。

    或者

    1. create or replace trigger "SEQ_ON_USER_GENERATOR" before  
    2. insert on databasename1.T_USER for each row  
    3. declare  
    4. mid number,  
    5. begin  
    6. select SEQ_ON_USER.nextval into mid from dual;  
    7. :new.id:=mid;  
    8. end   
    9. create trigger SEQ_ON_USER_Trigger   
    10. before insert on T_USER for each row   
    11. begin   
    12. select SEQ_ON_USER.nextval into :new.id from dual;   
    13. end SEQ_ON_USER_Trigger;   

     

    展开全文
  • 今天从oracle迁移数据到mysql碰到个需求:原先的主键字段需要改成mysql中的自增字段,而且原先数据的值不能变,以后新插入的值从原先数据最大的值开始自增。 解决办法: 构建环境: mysql> CREATE TABLE test -> ( ...
  • Oracle创建序列化: CREATE Sequence myseq INCREMENT BY 1 -- 每次加1 START WITH 2008500009 -- 从1开始计数 NOMAXVALUE -- 不设置最大值 NOCYCLE -- 一直累加,不循环 CACHE 10; oracle删除序列化 DROP ...

    SEQUENCE

    Oracle创建序列化:

    CREATE Sequence myseq
       INCREMENT BY 1 -- 每次加1 
       START WITH 2008500009 -- 从1开始计数
       NOMAXVALUE -- 不设置最大值
       NOCYCLE -- 一直累加,不循环
       CACHE 10;
    

    oracle删除序列化

    DROP SEQUENCE myseq;
    

    Oracle修改序列化

    如果想要改变初始值,必须 drop sequence 再重新 create

    ALTER SEQUENCE myseq 
    INCREMENT BY 10 
    MAXVALUE 10000 
    CYCLE    -- 到10000后从头开始 
    NOCACHE ; 
    

    案例讲解

    更新序列表

    序列编号

    --创建序列
    CREATE Sequence myseq
       INCREMENT BY 1
       START WITH 2008500008
       NOMAXVALUE
       NOCYCLE
       CACHE 16;
    
    --按序列Sequence更新表
    UPDATE (SELECT * FROM JE_Headers ORDER BY JE_HEADER_ID) T
       SET T.DOC_SEQUENCE_VALUE = MYSEQ.NEXTVAL,T.DOC_SEQUENCE_ID = 6051;
    

    实现效果:
    在这里插入图片描述

    --删除序列
    DROP SEQUENCE myseq;
    
    展开全文
  • Oracle使用序列创建自增字段,自增长列。
  • 那如何实现Oracle的主键自增呢,这里我们记录一种最常用的方式:sequence + trigger。 就是利用Oralce的序号和触发器来实现字段的自增,下面直接来看一个完整的例子。 一、创建表结构 这里我们简单创建一张表...

    在实际项目开发过程中,设计数据库表时经常遇到需要主键自增的场景。那如何实现Oracle的主键自增呢,这里我们记录一种最常用的方式:sequence + trigger

    如何实现 Oracle 的自增序列,两步轻松搞定

     

    就是利用Oralce的序号和触发器来实现字段的自增,下面直接来看一个完整的例子。

    一、创建表结构

    这里我们简单创建一张表做例子,其中表中的id字段就是我们后面准备用来作为自增的字段。

    create table T_EMP
    (
    	ID NUMBER not null,
    	EMP_CODE VARCHAR2(64),
    	EMP_NAME VARCHAR2(64)
    );

    二、创建序列(sequence

    这里创建自增序列,用于后面和上表的关联。

    CREATE SEQUENCE T_EMP_SEQUENCE
    	MINVALUE 1 --最小值
    	NOMAXVALUE --不设置最大值
    	START WITH 1 --从1开始计数
    	INCREMENT BY 1 --每次加1
    	NOCYCLE --一直累加,不循环
    	NOCACHE; --不建缓冲区

    三、创建触发器(trigger

    创建触发器,把表和序列关联起来,并设定每当表中新增数据的时候触发。

    如何实现 Oracle 的自增序列,两步轻松搞定

     

    代码如下,

    CREATE OR REPLACE TRIGGER T_EMP_TRIGGER BEFORE INSERT ON T_EMP FOR EACH ROW WHEN(NEW.ID IS NULL)
    BEGIN 
     SELECT T_EMP_SEQUENCE.NEXTVAL INTO:NEW.ID FROM dual;
    END;

    四、测试

    上面sequence和trigger都创建好之后,就可以添加数据测试了。这里我们直接insert几条数据,注意看id字段的变化就可以了。

    INSERT INTO T_EMP (EMP_CODE, EMP_NAME)
    VALUES ('zhangsan', '张三');
    
    INSERT INTO T_EMP (EMP_CODE, EMP_NAME)
    VALUES ('lisi', '李四');
    
    INSERT INTO T_EMP (EMP_CODE, EMP_NAME)
    VALUES ('wangwu', '王五');

    我们看下结果,

    如何实现 Oracle 的自增序列,两步轻松搞定

     

    从上图看出,已经实现表中id字段的自增,大功告成。

    展开全文
  • Oracle自增序列

    2020-11-01 18:46:36
    一个序列的值是由特别的Oracle程序自动生成,因而序列避免了在运用层实现序列而引起的性能瓶颈。 SQL如下(示例): CREATE sequence seq_tableName increment BY 1 START WITH 1 MAXVALUE 99999999 minvalue 1 ...

    简介

    什么是序列:

    序列是一数据库对象,利用它可生成唯一的整数。一般使用序列自动地生成主码值。一个序列的值是由特别的Oracle程序自动生成,因而序列避免了在运用层实现序列而引起的性能瓶颈。
    

    SQL如下(示例):

    CREATE sequence seq_tableName
    increment BY 1        
    START WITH 1 
    MAXVALUE 99999999
    minvalue 1
    cycle
    nocache;
    

    参数说明:

    increment by:指定序列之间的间隔,该值可为(正或负)的整数,不可为0,序列为升序,忽略该值,缺省值为1
    start with:指定生成的第一个序列号,升序时序列从比最小值大的开始,缺省值为序列最小值.降序时:序列可由最大值小的值开始,缺省值为序列的最大值.
    maxvalue:指定序列可生成的最大值
    minvalue:指定序列可生成得最小值
    cycle,nocycle:表序列生成器达到限制值后是否循环.cycle循环,当递增到最大值时,循环到最小值;对于递减序列达到最小值,循环到最大值;nocycle不循环:达到限制值后,继续会发生错误.
    cache,nocache:是否缓冲,cache:定义存放序列的内存的大小,默认为20..对序列进行内存缓冲改善序列的性能.
    

    SQL例句

     创建测试表-----
     create table test(
     id   NUMBER(20) not null,
     name VARCHAR2(30) 
     )
     创建序列-----
     CREATE sequence seq_test
     increment BY 1        
     START WITH 1 
     MAXVALUE 99999999
     minvalue 1
     cycle
     nocache;
     获取序列的自增id--(nextval:每次获取的不同的sequence值,根据increment增量,序列增加
                       currval:获得当前指向的sequence值,只执行currval,不会因执行次数而改变)
     select seq_test.nextval from dual; 
     select seq_test.currval from dual;
     删除序列----
     drop sequence seq_test;
     更改序列----
     alter sequence seq_test increment BY 2 MAXVALUE 888888;
     调用序列插入----
     inset into test(id,name) values(seq_test.nextval,'姓名');
     查询当前用户的所有序列----
     select SEQUENCE_OWNER,SEQUENCE_NAME from dba_sequences where sequence_owner='用户名';
    

    总结

    提示:这里对文章进行总结:

    展开全文
  • oracle 实现自增序列

    2017-08-26 11:09:51
    一 丶新建一个表: CREATE TABLE example( ID Number(4) NOT NULL PRIMARY KEY, NAME VARCHAR...二 丶建一个序列: CREATE SEQUENCE example_sequence INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAX
  • ORACLE自增序列

    千次阅读 2020-04-30 20:40:28
    今天正式环境新增数据异常,排查后是oracle主键id已存在。...1.删除自增序列 DROP SEQUENCE SEQ_TT_SECNET_MAINTAIN_INFO 一般命名为SEQ_表名。 2.重新定义自增序列 create sequence SEQ_TT_SECNET_MAINTAIN...
  • oracle 创建自增序列

    万次阅读 2018-07-19 08:58:20
    create sequence seq_sys_user minvalue 1 maxvalue 999999999999999999 start with 1 increment by 1 nocache--创建序列 INSERT INTO SYS_USER(id,user_name,password)VALUES(seq_sys_user.NEXTVAL,1,11);--自增...
  • oracle如何设置自增字段

    千次阅读 2020-03-04 16:27:18
    我们在项目中遇到oracle数据库需要进行对表增加自增字段,简单的分为两步:创建序列和创建触发器,详细步骤如下: 1、我们先创建一张测试表,进行测试: 2、创建序列,如下序列从1开始每次增加1最大为999999999: ...
  • 这里写自定义目录标题oracle自增序列及其触发器创建序列创建触发器序列的查询更改删除引用资源 oracle自增序列及其触发器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown...
  • oracle设置自增字段,oracle序列

    千次阅读 2016-10-24 16:36:57
    11.SELECT "NWVIDEO_device_did_seq".NEXTVAL -- 这里涉及到oracle序列,详细可以参考<a target=_blank href="http://blog.csdn.net/qq_22642239/article/details/52912893">oracle序列详解 12.INTO next_did 13....
  •  我用的是12c版本的,它有一个新特性,可以这样设置自增序列,在创建表是,把id设置自增序列 create table t ( id number generated by default as identity (start with 1 increment by 1), name varchar2...
  • 创建自增序列 create sequence APP_SEQ minvalue 1 maxvalue 999999 start with 1 increment by 1 nocache; 创建触发器 create or replace trigger APP_TRI before insert on MMC_APP_BASE_INFO for each...
  • 上网搜了下资料,得知可以通知配置自增序列的方式解决这个问题。 在oracle数据库创建序列 CREATE SEQUENCE SEQNAME //序列名字 INCREMENT BY 1 //每次自增1, 也可写非0的任何整数,表示自增,或自减
  • Oracle主键自增序列

    2018-12-28 15:21:00
    2019独角兽企业重金招聘Python工程师标准>>> CREATE SEQUENCE CMPO_PUSH_SEQ...建Oracle主键自增序列,没错插入自增1   转载于:https://my.oschina.net/u/3829307/blog/2994713
  • oracle主键自增

    2014-05-23 14:39:04
    oracle 数据库主键自增脚本 --第一步,创建表 --第二步,创建自增序列 --第三步,创建触发器
  • oracle自增序列

    2016-01-26 15:41:22
    1.新建表结构 create table tb_user ( userId INTEGER not null, userName CHAR(20), constraint PK_TB_USER primary key (userId) ) 2.新建自增序列 create se
  • Mybatis Plus 3 oracle 自增序列

    千次阅读 2020-06-11 16:57:59
    Mybatis Plus 3,oracle 自增序列配置 config.yml 配置文件 #mybaits-plus配置,修改主键类型,mapper.xml、type 别名等 mybatis-plus: mapper-locations: classpath:/mapper/*Mapper.xml global-config: #主键...
  • oracle 里面设置自增序列

    千次阅读 2017-10-20 17:03:03
    如果想在Oracle数据库里实现数据表主键自增,我们似乎没有办法像MySql般直接定义列的属性来实现。不过对于这个数据库的常用功能,我们还是有办法实现的。这里将展示使用触发器来实现主键自增。 1.准备 ...
  • oracle设置表的主键字段为自增序列(实例) 1、首先创建一个表(如日志表) //删除库表中存在的日志表 drop table S_LOG_INFO cascade constraints; //新建日志表 create table S_LOG_INFO ( PRIMARYKEY ...
  • Oracle建表[自增序列]

    2018-02-07 11:17:00
    创建表 1 create table VACATIONSDAY 2 ( 3 fldid NUMBER(22) not null, 4 fldname varchar2(200), 5 fldbegindata date, 6 fldenddata date, 7 fldselectid number(10) ...创建序列自增 1 ...
  • 方法一:序列 第一步创建序列:CREATE SEQUENCE topic_sequence   INCREMENT BY 1  START WITH 1   NOMAXVALUE  ...
  • 1、创建序列 CREATE SEQUENCE T_TEST2_SEQUNCE MINVALUE 1 MAXVALUE 999999999 START WITH 1 INCREMENT BY 1 ...T_TEST2_SEQUNCE 序列名称 ...cache 50 获取nextval时 oracle每次产生序列值的个数 2、...
  • 如何实现Oracle主键自增,通过写sequence和触发器,很全面,绝对帮你解决问题
  • 如图我创建了表和自增数列![图片说明](https://img-ask.csdn.net/upload/201512/21/1450709276_37439.png) 如图我创建了触发器 ![图片说明](https://img-ask.csdn.net/upload/201512/21/1450709309_470027.png) ...
  • increment by 1 //自增1 start with 1 //从1开始 minvalue 1 //最小1 maxvalue 999999999; // 最大值可以不设置 NOCYCLE --不循环 CACHE 10 --缓存10个 select * from user_sequences; //查看所有已经创建的序列 ...
  • oracle设置主键自增(超简单)

    千次阅读 2020-12-02 14:42:53
    oracle设置主键自增 不同于mysql,oracle主键自增不能在建表时直接设置,其实也很简单。 1.建表 CREATE TABLE test ( id NUMBER NOT NULL, key1 VARCHAR2(40) NULL, key2 VARCHAR2(40) NULL ); 2.设置主键 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,850
精华内容 5,940
关键字:

oracle设置自增序列