mysql插入数据时失败但是主键id自动增加了一该如何解决

插入时因重复导致插入失败会导致id自增,第二次插入其它数据时会在会变成id加了两次的情况

7个回答

配置一下事务,如果出现异常情况则数据库进行回滚

a9805943
a9805943 我配置好了事务回滚,可是回滚后主键还是会加上去
4 年多之前 回复
a9805943
a9805943 我先去学习下事务的用法尝试一下
4 年多之前 回复

自增是这样的,,如果失败回自动加一,,但数据不会插入

重复是指别的字段重复了是吧

1.在保存前要有数据的正确性校验处理
2.插入数据操作改成存储过程,检查是否有重复

自己实现主键生成器。不用系统自带的:)

建议使用事务来进行持久化的处理,这样可能就不会出错了。希望对你有用图片说明

PermanentKing
PermanentKing 想问问这个要怎么做
大约一年之前 回复

可以支持回滚,的把数据库类型设置为InnoDB

Harvey_zz
Harvey_zz 回复Jerry_liu20080504: 引擎改为Memory就可以了
6 个月之前 回复
Jerry_liu20080504
Jerry_liu20080504 设置为InnoDB后,即便回滚也解决不了这个问题。
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

怎么向mysql导入数据的同时在主键列自动生成uuid

数据表有id这一列,为主键列。现在如果有数据文件,如excel或者xml,想将其中的数据导入对应的目标表,但是不使用数据文件中的id列,而是导入其他数据列的同时为id列生成uuid并保存在表里,怎么实现呢? 比如表结构是 id name age excel文件是 1 张三 20等等, 导入的时候只让name=张三,age=20 id不取1而是生成一个uuid,怎么做到呢,工具是Navicat,数据库是mysql

mysql批量插入unique字段重复忽略错误 错误数据也返回主键id的问题

数据库中mobile字段设置unique索引 插入的sql语句: <insert id="insertPlatUserBatch" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id"> insert ignore into plat_user (mobile) values <foreach collection="list" item="item" index="index" separator=","> (#{item.mobile} ) </foreach> </insert> 打印插入后的list当mobile已存在的时候还是会莫名返回一个不存在的主键 例如:,mobile=18423134564,的数据数据库中已存在, 却还是反回了一个主键id(数据库中并未插入该id数据) 麻烦大佬讲解下这个id为什么会生成 以及keyProperty具体做了什么 有没有只返回插入成功的id 已存在的重复数据未插入成功的不返回id 实现通过id的有无来判断哪些插入成功,哪些mobile已存在插入失败

mybatis数据表(mysql)的主键非自增长,如何插入数据(需插入主键)实现主键自增长?

举例来说就是有表person,person有id(mysql数据库,主键,非自增),和name,pswd三个字段。如果是自增的情况,我们通常是这样处理 <insert id="insert" parameterType="Person" useGeneratedKeys="true" keyProperty="id"> insert into person(name,pswd) values(#{name},#{pswd}) </insert> 这种情况不许要插入主键,因为person表主键是自增长的。但如果主键不是增长的情况呢?如何处理。主键不是自增长就应该必须插入主键。 在步改动表结构的情况下!我能想到有两种方式可以解决,一个就是插入主键时实现自增长,比如第一次主键插1,第二次插2.这种方式不是很好。第二中就是在mapper.xml中是否可以实现向oracle序列那样进行自增长,小弟能力不够,还希望各位前辈能多多指教。如有更好的方法请指出。

mybatis+mysql 一表主键自增, 插入数据,怎么返回主键

mybatis+mysql 一表主键自增, 插入数据,怎么返回主键。很多人说的都是返回了插入的行数

数据库插入数据但是不填写主键内容

数据库表有两个字段id和suggestion 其中id是主键 我在网页的文本框里只填写了suggestion的内容 但是不填写id的内容 要怎么处理这个id

MySQL主键自增问题,一个方法同时往一个表中插入记录

方法一插入完,执行方法二,此时方法二包主键冲突。方法二和方法一处在不同事务中

mysql 更新一条记录除主键外所有数据

mysql 更新一条记录除主键外所有数据,如: update tablename set fieldname1 = 'value1' where id ='1'; 但是可不可以如插入时不用指定字段的: insert into tablename value('1','2','3','4'); 额,没说清楚,我是指更新数据时不指定字段

数据表ID自增长另外定义了一个主键,向数据库插入一条数据报错,提示主键冲突

sql _:insert into POS_SaleMaster (companyID,billNo,shopID,billDate,billTime,vipID,cashierID,personnelID,payMethod,payAmount,cashAmount,bankCardAmount,changeAmount,vIPIntegral,billStatus,finished,checkDate,promotionID,printDegree,roundDigitNum,otherAmount,otherAmountPresend,dischargeIntegralAmount,dischargeIntegral) values ( 'UR','UR006616063000037','UR000057','2016-06-30 19:05:56','2016-06-30 19:05:56','8urP0282105','051405024','051405024','6','237','0','237','0','237','4','0','2016-06-30 19:05:56','38','0','0','0','0','0','0' ) 19:05:55,786 ERROR [stderr] (http--192.168.15.62-80-1) com.microsoft.sqlserver.jdbc.SQLServerException: 违反了 PRIMARY KEY 约束“PK_POS_SaleMaster”。不能在对象“dbo.POS_SaleMaster”中插入重复键。重复键值为 (UR013616063000024)。 19:05:55,786 ERROR [stderr] (http--192.168.15.62-80-1)

插入数据库中的表时,如何让表的主键ID自动生成并递增?

代码如下所示 ``` public HttpResponseMessage Post(AA a) { db.BB.Add(a); } ``` 其中AA的结构是 ``` public AA { public string Apple{get;set;} public string Banana{get;set;} } ``` 而BB的结构为 ``` public BB { public int ID{get;set;} public string Apple{get;set;} public string Banana{get;set;} } ``` 我现在想讲AA中的数据保存至BB表中,并且ID能够自动生成并递增。 请问有什么办法能够实现

MYSQL查询用到的主键id索引问题

CREATE TABLE `mytest` ( `id` int(10) NOT NULL AUTO_INCREMENT, `a` int(50) DEFAULT NULL, `b` int(50) DEFAULT NULL, `c` int(50) DEFAULT NULL, `index` int(50) DEFAULT NULL, `remark1` varchar(255) DEFAULT NULL, `remark2` varchar(255) DEFAULT NULL, `remark3` varchar(255) DEFAULT NULL, `remark4` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10059857 DEFAULT CHARSET=utf8 COMMENT='测试1000万数据'; 本人菜鸟,希望大佬们多多指教 这是本人测试建的表,插入了1000万数据,主要是为了测试一下mysql千万数据分页查询时的速度,查询8000000往后100条数据 建表因为主键id唯一自增,所以默认为主键索引 ![查看索引](https://img-ask.csdn.net/upload/201903/28/1553762081_28446.png) SELECT * from mytest limit 8000000,100 > OK > 时间: 8.106s 此查未使用到索引,耗时比较久 SELECT * from mytest where id>(SELECT id from mytest LIMIT 8000000,1) limit 100 > OK > 时间: 5.87s 此处似乎用到了索引,速度有所提升? 这是explain结果 ![图片说明](https://img-ask.csdn.net/upload/201903/28/1553763277_276647.png) 此处是外面查询用到了索引,子查询未用到索引吗?试了多次发现都是差不多这个速度,感觉还是挺慢的 然后 按理说主键id已经是自增索引,查询速度应该很快才对吧,这时候我又对主键id这个字段单独创建了一个普通索引 CREATE index id_index on mytest(id) > OK > 时间: 26.275s ![查询索引](https://img-ask.csdn.net/upload/201903/28/1553762745_778699.png) 查看索引发现和主键索引应该没啥区别,可是,,, 发现查询居然变快了不少??? SELECT * from mytest limit 8000000,100 > OK > 时间: 9.242s 这里未用到索引 SELECT * from mytest where id>(SELECT id from mytest LIMIT 8000000,1) limit 100 > OK > 时间: 1.853s 这是explain结果 ![图片说明](https://img-ask.csdn.net/upload/201903/28/1553763018_643436.png) **这里应该是用到了索引,可是为什么会出现这种情况呢,主键id也是索引,查询就比较慢,单独对id创建了一个普通索引查询速度居然变快了许多,想了半天没明白为啥,求前辈们指教** 此外查询时我也尝试连表查询 SELECT * from mytest a join (SELECT id from mytest limit 8000000,100) b on a.id=b.id; 发现和SELECT * from mytest where id>(SELECT id from mytest LIMIT 8000000,1) limit 100;这个查询耗时几乎一致 附一下表数据 ![图片说明](https://img-ask.csdn.net/upload/201903/28/1553764984_854206.png)

mysql数据库中自动增长的主键也可以手动插入值吗?如何插入???是直接在数据库语句操作的那种??

以前没有深入mysql项目中用到,求解,MSSQL都有 [code="java"]SET IDENTITY_INSERT [flow] ON INSERT INTO [flow]([flow_ID],[flow_Name],[detail]) VALUES (1,'请假','请假') INSERT INTO [flow]([flow_ID],[flow_Name],[detail]) VALUES (2,'报销','报销') SET IDENTITY_INSERT [flow] OFF[/code]其中:flow_id的自增的 MYSQL怎么写

SQL 数据插入失败,自增ID被占用

数据库有一个表ID使用的是自增长,数据插入失败自增ID会被暂用,这样数据的ID就不是连续的,有什么方法可以让数据ID连续

JDBC添加数据在数据库中不显示,但是主键自动递增

在使用JDBC给数据增加数据的时候,返回值表面添加成功,但是在数据库中看不到,在数据库中使用sql直接运行可以添加,但是主键不连续(已经设置了主键自动递增)设置了主键自动递增,中间缺的差值正好是我在程序中运行的次数。 也就是说,sql成功传递到了数据库。但是不知道什么原因没有更新数据库, 数据库版本为mysql8.0(之前5.6版本的数据库也是同样的问题); 编译平台为idea2019.2.3; 数据库驱动为mysql-connector-java-8.0.18.jar。 ``` String sql2 = "INSERT INTO user VALUES ('8','klj','789456')"; insert(sql2); public int insert(String sql) { int k = 0; try { PreparedStatement ps = conn.prepareStatement(sql); // ps.setString(1,"2"); // ps.setString(2,"safasd"); // ps.setString(3,"7896"); System.out.println(ps); k = ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally {//当数据库使用后必须关闭,如果没有关闭数据库的接口有限,下次就不能连接 try { if (rs != null) { rs.close(); // System.out.println("rs"); } } catch (Exception e2) { e2.printStackTrace(); } try { if (ps != null) { ps.close(); // System.out.println("ps"); } } catch (Exception e2) { e2.printStackTrace(); } try { if (rs != null) { rs.close(); // System.out.println("rs"); } } catch (Exception e2) { e2.printStackTrace(); } } return k; } ```

sql语句 插入A表中一条新的数据同时将获取的主键值插入到B表(用的是mysql数据库)

sql语句 插入A表中一条新的数据同时将获取的主键值插入到B表(用的是mysql数据库)

sql server新增数据时主键自动生成

sql server新增数据时主键自动生成 生成规则为四位年份+二位月份+三位流水号 如:201812001、201812002 这个应该怎么解决,目前思路是写函数,函数应该怎么写,求各位大神帮忙

MySQL数据以行插入时怎么空出一格给自增量的id用?

MySQL数据以行插入时怎么空出一格给自增量的id用? 我现在写的是 "insert into db values (%s,%s)",value Value=[a,b] 这直接从第一格开始插入数据 而我的第一格为id 怎么使其从第二格开始插入

获取最后插入的varchar id是主键

<div class="post-text" itemprop="text"> <p>I have multiple table ,which has to be inserted using different forms and all table have one id which is primary key and its varchar (NOT NULL),So i have one class function named as id_calc($tbl,$id) where $tbl is a parameter with table name and $id is a field id .And each time while inserting this function has to be called for id.</p> <p>for example: If my id is "web1" ,next when i insert it shud give "web2","web3"...... i have tried with LAST_INSERT_ID() but its not working.so i tried with fetching the max(id) and splitting the string and variable but is also giving some problem.so how can i do this.please help!!!</p> <pre><code>class first{ public function id_calc($tbl,$id) { $sql = mysql_query("SELECT max($id) FROM $tbl where $id like '%web%'"); if($sql) { while ($row = mysql_fetch_assoc($sql)) { $user=$row; $a=implode(" ",$user); } $pattern = "/(\d+)/"; $array = preg_split($pattern, $a, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); $new[]=$array['0']; $new[]=$array['1']+1; $result=implode("",$new); return $result; } } } </code></pre> <p>this function is called like </p> <pre><code> public function insertreport1() { $obj=new first(); $id=$obj-&gt;id_calc(tablename,idfield); //insert query } </code></pre> <p>this is my table structure</p> <pre><code>CREATE TABLE `report` ( `inc_id` varchar(25) NOT NULL, `inc_status` int(11) NOT NULL, `inc_date` datetime NOT NULL, `inc_Name` varchar(45) NOT NULL, `inc_Age` int(11) NOT NULL, `inc_Gender` varchar(45) NOT NULL, `inc_Mobile` varchar(45) NOT NULL, `inc_Address` varchar(250) NOT NULL, `inc_treatment` varchar(45) DEFAULT NULL, `inc_userid` varchar(10) NOT NULL, `inc_repTime` datetime NOT NULL PRIMARY KEY (`inc_id`), ) ENGINE=InnoDB DEFAULT CHARSET=latin1; </code></pre> </div>

java语言 play framework插入Mysql数据主键名不为id 如何处理?

java语言 play framework插入Mysql数据主键名不为id 如何处理?因为这个框架对数据库主键有要求,主键名必须叫 id,否者不能做添加数据的操作。求大神帮忙

Petapoco往mysql数据库插入数据问题

用Petapoco往mysql数据库插入数据时,主键必须是自增长的吗?

2019 Python开发者日-培训

2019 Python开发者日-培训

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

设计模式(JAVA语言实现)--20种设计模式附带源码

设计模式(JAVA语言实现)--20种设计模式附带源码

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

java后台+微信小程序 实现完整的点餐系统

java后台+微信小程序 实现完整的点餐系统

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

2019 AI开发者大会

2019 AI开发者大会

玩转Linux:常用命令实例指南

玩转Linux:常用命令实例指南

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

Git 实用技巧

Git 实用技巧

Python数据清洗实战入门

Python数据清洗实战入门

使用TensorFlow+keras快速构建图像分类模型

使用TensorFlow+keras快速构建图像分类模型

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

程序员的算法通关课:知己知彼(第一季)

程序员的算法通关课:知己知彼(第一季)

MySQL数据库从入门到实战应用

MySQL数据库从入门到实战应用

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

手把手实现Java图书管理系统(附源码)

手把手实现Java图书管理系统(附源码)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

.net core快速开发框架

.net core快速开发框架

玩转Python-Python3基础入门

玩转Python-Python3基础入门

Python数据挖掘简易入门

Python数据挖掘简易入门

微信公众平台开发入门

微信公众平台开发入门

程序员的兼职技能课

程序员的兼职技能课

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

HoloLens2开发入门教程

HoloLens2开发入门教程

微信小程序开发实战

微信小程序开发实战

Java8零基础入门视频教程

Java8零基础入门视频教程

相关热词 c#跨线程停止timer c#批量写入sql数据库 c# 自动安装浏览器 c#语言基础考试题 c# 偏移量打印是什么 c# 绘制曲线图 c#框体中的退出函数 c# 按钮透明背景 c# idl 混编出错 c#在位置0处没有任何行
立即提问