mysql 插入数据失败防止自增长主键增长的方法

mysql设置了自增长主键ID,插入失败的那个自增长ID也加一的,比如失败5个,下一个成功的不是在原来最后成功数据加1,而是直接变成加6了,失败次数一次就自动增长1了,能不能让失败的不增长的?

或者说mysql插入数据失败,怎么能防止主键增长?

MYSQL不保证AUTO_INCREMENT依次增长(1,2,3,4,5),但是可以保证正向增长(1,3,5,9)所以,当你某次操作失败后,下次AUTO_INCREMENT就不是顺序的了。

innodb的自增是缓存在内存字典中的,分配方式是先预留,然后再插入的。所以插入失败不会回滚内存字典。让innodb识别到当前最大id的方法是重启server 更新AUTO_INCREMENT缓存,或者用alter table `表` AUTO_INCREMENT = 最大数;  

这种思路基本不实用,下面介绍一种方便的方法。

Mysql主键如果在insert插入时有值,将不使用自增。也就是说插入数据的时候只要自己把ID加上就按照插入的数进行自增了,这个数通过自己的逻辑判断代码来赋值,只要ID不重复就可以了。例如:

String sql = "insert ignore into mytable(id,number,opendate) values(?,?,?)";

new Object[] {id,number,opendate});

另外一个保证的方法就是每次插入前查询最大ID,然后加1再作为ID插入。

当然还有通过临时表的方式来保证最终插入的都是成功的,不过比较麻烦了。

时间: 2024-11-03 01:46:10

mysql 插入数据失败防止自增长主键增长的方法的相关文章

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

问题描述 mysql插入数据时失败但是主键id自动增加了一该如何解决 插入时因重复导致插入失败会导致id自增,第二次插入其它数据时会在会变成id加了两次的情况 解决方案 配置一下事务,如果出现异常情况则数据库进行回滚 解决方案二: 重复是指别的字段重复了是吧 解决方案三: 1.在保存前要有数据的正确性校验处理 2.插入数据操作改成存储过程,检查是否有重复 解决方案四: 建议使用事务来进行持久化的处理,这样可能就不会出错了.希望对你有用 解决方案五: 自增是这样的,,如果失败回自动加一,,但数据不

mfc-MFC向mysql中插入数据失败

问题描述 MFC向mysql中插入数据失败 MFC向mysql中插入(删除,更新)数据失败,但是查询是可以成功的,将我的插入语句在navicat for mysql中执行是可以正常插入的:INSERT INTO student VALUES ('111''xzf')求大神指导,谢谢!(据说是权限什么的问题,不太懂) 解决方案 如果确定语句是一样的,但在代码中无法正确的执行,应该就是权限的问题. MySQL的用户权限设置问题注意用户权限,与系统主机的权限 解决方案二: MySQL 插入数据

Mysql设置自增长主键的初始值

alter table table_name auto_increment=n; 注意n只能大于已有的auto_increment的整数值,小于的值无效. show table status like 'table_name' 可以看到auto_increment这一列是表现有的值. 步进值没法改变.只能通过下面提到last_inset_id()函数变通使用 Mysql可以使用AUTO_INCREMENT来设定主键的值为自增长的,其默认值是1,如果想把它的初始值设置为1000,比较笨的办法是先插

Mysql设置自增长主键的起始值

Mysql可以使用AUTO_INCREMENT来设定主键的值为自增长的,其默认值是1,如果想把它的初始值设置为1000,比较笨的办法是先插入一条记录并指定主键的值为999,然后delete改行记录,例如:  代码如下 复制代码 insert into test(pk) values(999); delete from test where pk = 999; 更好的方法是使用alter的方法来直接修改,例如:  代码如下 复制代码 alter table test AUTO_INCREMENT

在Mysql,SqlServer及Oracle中设置主键自动增长

1.把主键定义为自动增长标识符类型 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如: create table customers(id int auto_increment primary key not null, name varchar(15)); insert into customers(name) values("name1"),("name2"); select id from customers;

ubuntu下php向mysql插入数据中文乱码

问题描述 ubuntu下php向mysql插入数据中文乱码 查了很多东西,能配置的编码都配置成了utf8 解决方案 楼主,我的第一个采纳.. 解决方案二: http://www.linuxidc.com/Linux/2008-05/12967.htm 解决方案三: http://blog.csdn.net/pinghegood/article/details/6704673 解决方案四: 图片没有显示全来补充下 解决方案五: 解决方案六: 解决方案七: 解决方案八: 解决方案九: 创建数据库的时

同时插入两相同的数据-为什么通过php在向mysql插入数据时会同时插入两条相同的数据!

问题描述 为什么通过php在向mysql插入数据时会同时插入两条相同的数据! 这是url传递参数的代码(两端的html标签没有复制):href="choose.php?relation_id='.$row['user_id'].'&user_id='.$_COOKIE['user_id'].' 这是插入数据库的代码:<?php header("Content-Type:text/html; charset=utf-8"); include('MY_PHP_fil

php 解决MySQL插入数据出现 Incorrect string value: &amp;amp;#39;\xF0\x9F\x92\x8BTi...&amp;amp;#39;错误

在项目中向MySQL插入数据时,发现数据插入不完整,通过调试,发现插入语句也没什么特殊的错误.但是就是差不进去,于是就打开mysqli错误的调试 $ret = mysqli_query($this->conn, $sql) or die(mysqli_error($this->conn)); 结果弹出如下错误信息: Incorrect string value: '\xF0\x9F\x92\x8BTi...' 有错误信息就好办了,结果上网一查结果是:mysql编码格式utf-8格式,不支持带四

mysql-JDBC连接MySQL插入数据问题

问题描述 JDBC连接MySQL插入数据问题 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql", "root", "123456"); PreparedStatement sqlStmt =null; String Email=request.getParameter("Email"); String Passwo