`
beliveAda
  • 浏览: 110432 次
  • 性别: Icon_minigender_2
  • 来自: 西安
社区版块
存档分类
最新评论

解决项目中主键重复无法插入数据的问题

阅读更多
出现此问题是由于这样:表中之前有一些插入的数据,后期经别人导入数据,再次导入数据时出现如下问题:
    初步分析,是由于导入数据时,导入了自增的id,而数据库中自增的id始终停留在原始的那个值。印象中,小李同学曾经解决过此问题,是将开始自增的值由现在最大的值+1,即可解决。但苦于自己不是专业的数据库人员,也没有系统学习过这方面的知识。于是,先找了邱同学帮我解决。首先确定了确实是由于上述的情况造成的,则修改了表结构中自增字段的最小开始值,生成代码,然后开始commit。发现此处需要将数据先备份出来,然后再插入数据,才能解决此问题。如果数据库中数据量不大的情况下,这种解决办法还是可以的。但数据量大的情况下,光是导入数据就会很长时间。看来这不是最好的解决办法。于是乎,让系统慢慢的导数据。另外思考,db2应该会提供这种修改自增值开始的方法。于是我们继续查询资料。
    经查找,找到如下资料:
    对于自增序列(GENERATED by default)
  GENERATED by default可以直接通过一般的导入方式加载数据,不过有时候会有一点点小问题,自增序列没有进行分配,也就是说,原来表有50条记录,自增序列的下一次分配值为50,当你已经导入了1000条记录进去了,然后发现自增序列的下一次分配值还是为50,这种事不经常发生,但是偶尔会发生一次,比较郁闷的是,当表继续插入数据的时候,下一次分配就会发生冲突,尤其是如果自增建为主键的时候,会违反唯一约束。

  解决办法:首先找到这个序列分配的最大值,select max(id) from tablea;

  然后用下边这个命令,alter table tablea alter column restart with max(id)+1

    哈哈,终于找到这种解决办法。速度应该会比上一种解决办法快很对了吧。至少不用再次的插入数据。于是在下一张表中再次出现此问题时,使用如下的sql语句,“alter table QUESTIONNAIRE_RUBRIC_CL1 alter column RUBRIC_INST_ID SET GENERATED ALWAYS restart with 210;”,此语句一执行,那个速度真是超赞哦。看来以后再出现此种情况,就照此方法解决了。
     另外,在测试自增id是否连续自增时,发现id虽然是顺序自增,但会出现不连续的情况。经邱同学研究,发现建表时,使用了cache。
分享到:
评论

相关推荐

    完美解决Thinkphp3.2中插入相同数据的问题

    今天在使用TP3.2插入数据的时候,为了避免插入相同的数据(所谓相同的数据,其主键相同或者是唯一索引的字段相同),我创建的索引如下图,主键索引为自增字段,不可能出现重复,即唯一索引可能会出现重复,我希望的...

    MySQL 处理插入过程中的主键唯一键重复值的解决方法

    本篇文章主要介绍在插入数据到表中遇到键重复避免插入重复值的处理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE;接下来就分别看看这三种方式的处理办法。 IGNORE 使用ignore当插入的值遇到主键...

    MySQL自增主键删除后重复问题

     设置一张MySQL表,表里有一个自增主键ID,往表里插入数据,假如插入数据之后表后一行的ID是100,我先删除这条ID为100的记录,然后重新启动服务器,按理说如果再往这个表里插入新的记录,新纪录的ID将为101,对吧...

    elasticsearch进行批量插入的时候总是少数据

    现在导致数据被删除的情况应该是a表和b表的主键id重复,es默认mysql中的 id 为主键 并且document 的_id 和id保持一致, 导致a表中的数据被删除掉了(替换掉了) 三、解决方案 新建一个字段保存数据库的id 主键数据,...

    MySql三种避免重复插入数据的方法

    insert ignore 会忽视数据库中已经存在的数据,根据主键或者唯一索引判断,如果数据库没有数据,就会插入新的数据,如果有数据的话就跳过这条数据 小case 表结构 root:test> show create table t3G **************...

    数据库主键设计原则.txt

    目前一个比较好的主键是采用GUID,当然我是推荐主键还是字符型的,但值由GUID生成,GUID是可以自动生成,也可以程序生成 ,而且键值不可能重复,可以解决系统集成问题,几个系统的GUID值导到一起时,也不会发生重复...

    分享MYSQL插入数据时忽略重复数据的方法

    使用下以两种方法时必须把字段设为”主键(PRIMARY KEY”或”唯一约束(UNIQUE)”。1:使用REPLACE INTO (此种方法是利用替换的方法,有点似类于先删除再插入) 代码如下: REPLACE INTO Syntax REPLACE [LOW_PRIORITY...

    深入探寻mysql自增列导致主键重复问题的原因

    首先想办法解决问题,通过人工调大自增列的值,保证大于表内已有的主键即可,调整后,导数据正常。问题是解决了,接下来要搞清楚问题原因,什么操作导致了这种现象的发生呢?  这里有一种可能,即业务逻辑包含更新...

    labview数据库.docx

    另外还需保证插入的记录其主键列值不能和数据库中已有的记录重复,否则会出错。 如果语句中没有指明任何列名,则新插入的记录在每个属性列上必须均赋值,且排列顺序必须和数据库表中属性列一致。设置的值必须满足...

    (mysql面试题)MySQL中的索引、主键和外键的概念及其作用及代码展示.txt

    主键是数据库表中用于唯一标识每一行数据的列或一组列。主键的值不能重复,也不能为空。每个表只能有一个主键,主键的作用主要有以下几点: - 唯一标识每一行数据,确保数据的唯一性; - 作为其他表的外键引用,...

    U8升级问题汇总

    和演示账套对比该表的属性发现:主键ID_Flt为标识字段,演示账套标识值为“是”,而客户的数据中的值为“是(不适用于复制)”。故试着将值改为“是”。由于表rpt_glbdef,rpt_flddef与该表关系密切且标识值也为“是...

    数据库主键的设计和思考

     如果通过非系统增加记录时,可以不用指定该字段,不用担心主键重复问题。  其实它的缺点也是来自其优点,缺点如下:  因为自动增长,在手动要插入指定ID的记录时会显得麻烦,尤其是当系统与其它系统集成时,...

    Sql Server里删除数据表中重复记录的例子

    数据库中users表,包含u_name,u_pwd两个字段,其中u_name存在重复项,现在要实现把重复的项删除! [分析] 1、生成一张临时表new_users,表结构与users表一样; 2、对users表按id做一个循环,每从users表中读出一个...

    Flink实时读取Kafka数据批量聚合(定时按数量)写入Mysql.rar

    Flink实时读取Kafka数据批量聚合(定时/按数量)写入Mysql源码+kafka安装包+zookeeper安装包

    防止MySQL重复插入数据的三种方法

    `id` int NOT NULL COMMENT '主键', `name` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '姓名', `age` int NULL DEFAULT NULL COMMENT '年龄', `address` varchar(512) ...

    mysql 双向同步的键值冲突问题的解决方法分享

    我们同时启动A,B,就会出现主键ID重复 解决方法: 我们只要保证两台服务器上插入的自增长数据不同就可以了 如:A查奇数ID,B插偶数ID,当然如果服务器多的话,你可以定义算法,只要不同就可以了 在这里我们在A,B上...

    mysql中replace into的用法详解

    如果没有表不存在唯一键/主键 或者 插入的数据唯一键/主键没有重复的,那么会新增一条记录。 新建一个test表,三个字段,uid,name,mobile, id是自增的主键,mobile是唯一索引; create table test( uid int(11) ...

    2017年4月高等教育自学考试数据库系统原理真题.pdf

    2017年4月高等教育自学考试数据库系统原理真题.pdf

    主键自增功能测试报告1

    1. 自增后插入指定数值再继续自增(案例1) 2. 在自增列值重复时的情况(案例2、3) 3. 支持的数据类型(案例4) 4. 删除一张表中全部数据后计数起点,

Global site tag (gtag.js) - Google Analytics