oracle采用sequence自动生成主键 不连续问题

oracle采用sequence自动生成主键 第一天跟第二天插入的主键不连续 有谁遇到过这种问题 怎么解决呢

昨天插入的主键 值是1 到了今天第一次插入就跑到了21了

除了这张表的插入之外 没有其他的操作使用过这个sequence序列

--创建t_article表
create table t_article(
id number not null primary key,
title varchar2(200),
content clob,
source varchar2(255),
createtime date,
updatetime date,
deploytime date
)tablespace users;

--创建一个序列
create sequence article_seq
minvalue 1 maxvalue 99999999999999
increment by 1
start with 1;

0

2个回答

检查一下此序列的缓存大小Cache Size.把设置为1就好了。如果大于1,则每次访问的时候就会生成n个序列。如果这n个序列你又没有正好用完,所以你第二次访问的时候就不连续了

4
iteye_19243
iteye_19243 谢啦 默认是cache 10的 我直接改了nocache 搞定了
接近 7 年之前 回复

检查是否有触发器绑定

0
iteye_19243
iteye_19243 没有…直接使用的…知道怎么回事了…是缓存的问题…默认是cache 10 楼上正解
接近 7 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
insert时,使用sequence为表自动生成主键
插入数据时,使用sequence为表自动生成主键1.创建sequence  create   sequence   sequence_name     minvalue   1     maxvalue   99999999  start   with   1     increment  by 1     cache   202.建立触发器,使用sequence为表自动添加主键create or...
Oracle数据库主键自增的两种方式(SEQUENCE和触发器)
这种语句是mybatis 逆向工程中mapper.xml已经生成好了。除非自己写的mapper可以用,逆向工程的最好不要修改。所以要想使用不带指定id自增的语句,就选择触发器来实现自增。
mybatis使用oracle自动生成主键
下面总结了两种方式,一种是使用oracle的sys_guid函数自动生成,另一种是使用sequence,rn 方法一:        select sys_guid() from dual     insert into T_STORE (STORE_ID, STORE_NAME, STORE_PRICE,CREATE_DATE,END_DATE      )    values ( #{stor
Oracle Sequence 实现自增主键
由于Oracle不支持MySql的auto_increment,为了实现自动生成主键的操作在Oracle上,之前写了一篇文章是借助了 Oralce Sequence(序列)+ Oracle Trigger(触发器)来实现的:https://blog.csdn.net/libertine1993/article/details/54705928但是触发器不可靠且耗性能,于是有了这篇文章,我们利用序列...
hibernate中使用oracle的序列作为主键问题
@Idn @SequenceGenerator(name="gen",sequenceName="SEQ_ORDER_MAIN" )n @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="gen")n @Column(name = "ID", unique = true, nullable = false)按照上面
oracle中事务与sequence获取最新主键,批量insert冲突
读取excel内容做批量导入,使用mybatis中的foreach标签,其中把每一行的excel内容设置成一个bean,bean中的id用(select  sequence.nextval() from dual)得到,但是如果这个时候使用事务的话会造成冲突,无法连续得到id,这个时候要在mybatis中标签中加一个设置 useCache="false" flushCache="true"
用Mybatis在Oracle数据库中生成主键
        我们知道,mysql优化里面有一条:为每一张表都设置一个int类型的主键,它能够自增,方便分页和排序。nn        Oracle数据库中,它不支持主键自增,所以需要我们从序列中取得最新的序列值。nn        在Mybatis中,可以使用 selectKey标签,在执行SQL语句之前,为实体的ID属性赋值,然后再执行SQL。nnn<insert id="insert...
【转】JPA主键生成器和主键生成策略
nJPA主键生成器和主键生成策略rnrnJPA中创建实体时,需要声明实体的主键及其主键生成策略。我们有一个实体类叫做Email,其主键上声明如下:rn rnrn@Idrn@Column(name = "EMAIL_ID")rn@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "emailSeq")rn@SequenceG...
序列问题导致主键冲突
序列问题ncreate sequence BOSDATA.GET_PK_SEQnminvalue 1nmaxvalue 999999999999999999999999999nstart with 1001630254nincrement by 1ncache 2000ncycle;nnnnselect 'EAR' || to_char(sysdate,'YYYYMMDD')
Spring boot 中 Mybatis Plus 在 Oracle 新增数据时,主键自增问题
解决办法:nn1.spring boot 依赖版本改为 mybatis-plus-boot-starter n2.在配置文件中增加 nn#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";nid-type: 1n#
oracle主键的自动生成
oracle数据库中不能设置主键自增,通过“序列sequence+触发器trigger”实现主键自增 n 1. 创建序列create sequence CHML_SEQUENCE --创建序列CHML_SEQUENCEn minvalue 1 --最小值n maxvalue 99 --最大值n start with 1 --从1开始计数
高并发场景下oracle触发器+序列产生序号的一些现象与思考
最近工作上因为在处理系统同步的时候遇到了一些问题,在解决过程中,发现了一些现象,所以在这里mark一下,我现有的残缺理论体系还无法支撑做出合理的解释,在网上找了一下,也没有找到类似的案例,还望各位大拿指点一二。rn话不多说,直接上案例,在pl/sql上做的模拟。rnrnrn原始案例(故障):rn1.先创建一个表test,三个字段id,name,snorncreate table test(id i
Oracle数据库主键值生成的两种解决方案
解决方案一:使用序列和触发器实现(推荐)nn1、创建数据库表 设置主键nnncreate table Test_Table(n  id number(10) primary key, /*主键,自动增加*/n  remake varchar2(20)n);nn2、创建自动增长序列nnnCREATE SEQUENCE TestTable_Sequencen INCREMENT BY 1 -- 每...
Oracle唯一主键ID的生成
一般常用的方法有两者,使用Sequence和使用SYS_GUID ();方法一: n1. n创建序列Sequence-- Create sequence ncreate sequence SEQ_IDnminvalue 1nmaxvalue 99999999nstart with 6106nincrement by 1ncache 20norder;n2.insert into user(id,na
序列作为主键使用的原理、优缺点讨论
这几天和同事一直在讨论关于表设计中主键选择的问题,用sequence作为主键究竟有什么好处,又有什么缺点,尤其是有些事务场景上下文需要用到创建的序列值,如何用?以下是总结摘要,如有疏漏,还请过路的各位大侠赐教。 1、首先说下seq.nextval主要有以下两种使用场景:(1). 如果一个事务中只是INSERT时需要序列,其他地方不会需要这个序列,那么只需要在INSERT ... VALUES (s
MERGE中使用SEQUENCE,带来的序列快速增长问题
在使用MERGE INTO 语法的时候,经常是WHEN NOT MATCHED 则需要INSERT 数据,INSERT的时候会用到SEQUENCE,这时候会造成序列的快速增长。nn原因是由于SEQ.NEXTVAL语法的缘故,不管MERGE INTO是否执行了WHEN NOT MATCHED部分,只要编译时读到NEXTVAL,序列就会自增。由于MERGE INTO是扫描比对,因此序列会“空增长”。n...
oracle mybatis insert返回自动生成的主键
<insert id="insertVideoBase" parameterType="com.paic.icore.agr.farmer.farmerinfo.model.VideoBaseModel">n <selectKey keyProperty="videoBaseId" order="BEFORE" resultType="java.lang.String&q
SpringDataJPA使用Oracle序列设置值:主键字段、非主键字段
n n n 1.前景n项目使用SpringDataJPA+Hibernate+Oracle,使用Oracle序列设置Entity对应的主键值,这个很常见。实现步骤如下:n1>创建一个Oracle序列:nCREATE SEQUENCE morw.SEQ_MERCHANTS_PAY_INFO_IDnINCREMENT BY 1nMAXVALUE 999999999n...
Springboot整合Mybatis-plus与oracle的项目主键类型问题
问题出现rn工作过程中出现了一个很奇葩的需求,在一个Springboot整合Mybatis-plus搭的一个项目中,数据库用的oracle。老大说,考虑到之后的客户需求,可能某些表需要用字符串作为主键,某些可以用数字作为主键。rn一个项目难道不是应该统一表的主键类型嘛,我一时很纳闷,但是老大既然这么说了,那就想办法实现吧。rnMybatis-plus配置rn以下是Mybatis-plus的配置:rn# my...
mybatis-plus id主键生成的坑
mybatis-plus id主键生成的坑简要说明错误解决方案一1. 修改id字段类型2. 调整数据库id字段类型解决方案二添加注解其他`type`类型介绍n简要说明n由于mybatis-plus会自动插入一个id到实体对象, 不管你封装与否, 所以有时候导致一些意外的情况发生nn默认是生成一个长数字字符串(编码不同可能结尾带有字母)nn错误nested exception is org.apac...
Oracle通过存储过程建立表、index、sequence、trigger等
n在Oracle环境下,通过存储过程实现:rn判断表是否存在,如果不存在,就创建。rn在新建表的同时建立对应的index。rn又因为需要让主键自动增长,所以需要建立sequence和trigger。rn rnsql脚本如下所示:rnDECLARErn tb_exists NUMBER ;rnBEGINrn SELECT COUNT (*) INTO tb_exists FROM user_tabl...
Oracle解决主键ID自增问题触发器序列--进阶篇
Oracle触发器解决插入时ID自增问题--进阶篇第一种 序列触发器自增第二种 直接用触发器自增IDrn第一种 序列触发器自增rn这个是流行的做法,废话不多说直接上码:rn--简单介绍一下序列参数的意思rnCREATE SEQUENCE sequence //创建序列名称rn [INCREMENT BY n] //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1rn ...
Oracle数据库Merge Into 如何使用Sequence 而不“浪费”
1、问题背景:该问题是在做Data Stage时引出来的一个问题,必须使用Merge Into的时候会浪费很多NextVal。rn2、测试前提:创建脚本。rn-- 创建源表rncreate table sourceTest(rnid int,rnname varchar2(100),rnseq_value int,rnt_stamp datern);rnrnrn-- 创建目标表rncreate t...
数据迁移,序列导致主键冲突无法写入数据
公司产品升级,涉及到历史数据迁移。nn完成迁移后,使用过程中发现有个功能无法使用,检查dubbo的标准服务和jboss应用发现有个序列的执行报错。nn违反唯一约束 vie_zjyy.SYS_C00548407(这个序列data_mark_sequence)nn此序列是往data_mark_info表中插入数据,而此表的id是主键,已经使用到了48000+nn所以直接修改序列增长的值:nnALTER...
ORACLE主键ID的生成
一般常用的方法有两种,使用Sequence和使用SYS_GUID();nn nn方法一  使用序列号:nn创建序列号nnncreate sequence SEQ_T_USERnstart with 1nincrement by 1nnocache;nn再使用序列号nnn <insert id="save" parameterType="edu.mvcdemo.entity.User">...
hibernate的主键生成及可能出现的错误
重点:n1、hibernateutil工具类n2、程序员自己控制:assignedn3、数据库控制: identity(标识列/自动增长) sequencen4、hibernate控制:increment uuid/uuid.hexn5、其它nativen6、自定义主键生成器n7.错误集合n重点进行:nnhibernate的主键生成器:ngenerator元素:表示了一个主键生成器,它用来为持久化...
oracle 在插入数据库时自动生成主键
在插入数据时,希望主键时根据当前表的主键,自动生成:seq_【表明】.nextval。rn实例:aaa.seq_bbb.nextval。aaa为schema,bbb为表名
oracle创建表,序列,触发器,自动生成唯一主键
数据库oracle和mysql插入数据的区别?rnmysql数据库主键字段是increament,则插入数据不需要插入主键字段。数据库会自动生成主键rnoracle数据库主键字段必须创建序列,则插入数据必须插入主键字段。数据库根据序列自动生成主键rn那么如何让oracle数据库插入数据像mysql一样实现主键自增呢?解决方法是:序列+触发器rnrnrn案例:rnplsql图示:rn1.创建表:rn
Oracle之不用sequence快速插入id的两种方法sys_guid、max(id)
-
数据库主键自动递增,手动进行了删减,导致主键不连续
呵呵了真是,半天了不知道怎么解决。。直接删除旧主键,新建一个新主键不就好了?emmmm
MySQL中自增主键不连续之解决方案
    在数据库的设计中,我们常设置某一个字段是自增类型,但是如果期间执行其他操作的话,MySQL的记录会自加1,导致不连续的问题.在这里提供两种解决办法    方法一:每次执行插入操作时,都先执行查询操作,得到该序列号,然后插入时再加1;当然这种办法是最笨的方法,而且需要多执行一次操作    方法二:在每次插入数据之后,修正那个AUTO_INCREMENT值。就是   : 先 执行 ALTER ...
Oracle 自动生成 32位ID
1 codern[code="sql"]rnselectrnSUBSTR(TO_CHAR(DBMS_RANDOM.VALUE(11, 99)), 4, 32) ZBH fromrndual;rn[/code]
Oracle数据库事务与序列实现的自增id
Oracle数据库事务与序列实现的自增id, 事务异常处理
Hibernate通过注解配置Oracle序列
1.创建Oracle序列create sequence seq_idnincrement by 1nstart with 1nmaxvalue 999999999;2.在实体类主键的get方法上面添加注解@Idn@SequenceGenerator(name="gen",sequenceName="SEQ_ID" ,allocationSize=1)n@GeneratedValue(strateg...
Oracle中序列到达最大值会产生什么问题?
序列是oracle提供的用于生成一系列唯一数字的数据库对象,序列会自动生成顺序递增的序列号,以实现自动提供唯一的主键值,系列可以在多个用户并发环境中使用,并且可以为所有用户生成不重复的顺序数字,而不需要任何额外的I/O开销。rn rn创建序列rn 序列和视图一样,并不占用实际的存储空间,只是在数据字典中保存他的定义信息。当创建序列时必须拥有create sequence系统权限。rn语...
oracle自动生成主键不连续问题
我用自动增长序列来生成表的主键rn1、建立自动增长序列rncreate sequence test_seqrnminvalue 1 maxvalue 99999999999999rnincrement by 1rnstart with 1;rn2、创建触发器rncreate or replace trigger test_triggerrnbefore insert on testrnfor each rowrnbegin rnselect test_seq.nextval into :new.data_id from dual;rnend test_trigger;rn/rn这样利用触发器与自动增长序列建立了数据库的自动生成主键rn但是,我不停的运行数据库,如果连续往数据库里添加数据,则ID是连续的rn但是如果是上下午,或者分别两天的时间往数据库里添加,就会出现ID不连续的问题rn例如:rn第一天添加的数据的ID到103rn第二天在添加数据时ID就为121了rn这是为什么?
Oracle到MySQL数据库迁移之--主键生成策略替换
Oracle数据库到MySQL数据库迁移过程中的一大难题就是主键生成策略的替换. 如果之前的程序中使用Oracle的Sequence机制来实现主键的自增的话. MySQL中需要使用TableGenerator进行等价替换.替换的时候, 主要有三个地方需要修改:n以注解方式完成hibernate映射的实体;n以xml方式完成hibernate映射的实体;n数据库存储过程;n注解方式完成hibernat
Mybatis中自动生成主键
Mybatis中自动生成主键 在INSERT语句中,我们为可以自动生成(auto-generated)主键的列 STUD_ID 插入值。我们可以使用useGeneratedKeys和keyProperty属性让数据库生成auto_increment列的值,并将生成的值设置到其中一个输入对象属性内,如下所示: <insert id="insertStudent" parameterType="Student" useGeneratedKeys="true" keyProperty="studId"
Oracle自动生成主键&&UUID
rnrn在使用Oracle的时候,需要添加一个唯一的主键,一般使用的是36位的唯一的字符串,我们有两种方式rn rn转自: http://hbiao68.iteye.com/blog/1493759rn一、使用数据库自动生成的方式,自动添加唯一的ID值rn rnrnrnSql代码  nrnrnncreate table t_log(  rn    ssid varchar2(36) default...
解决自增id不连续的问题
在mysql中设置自增id,然后通过某些非确定性的语句进行数据的插入时,会对自增id的值造成影响,为了解决这个问题,可以简单的通过nALERT TABLE tableName AUTO_INCREMENT = 1;重置自增的值,但这个操作非常耗时,如果要求不高,可以不解决
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 大数据分析采用的基础技术 大数据采用的基础技术