即使没有新行插入,自动增量列也会递增

时间:2016-05-04 05:00:28

标签: mysql

我创建了一个具有条件行插入功能的表,因此有时新行不会插入到列中。这里的问题是,即使行插入失败,auto_inc列也会递增,因此存储在其中的值将是这样的:

Sl No。

1

2

4

7

8

9

它看起来很麻烦请求帮助。谢谢提前

4 个答案:

答案 0 :(得分:1)

sspencer7593提到过   "The behavior of AUTO_INCREMENT is fairly well defined. And it's primarily designed to generate unique values. It's not designed to prevent gaps."

但是,由于MySQL允许您为AUTO_INCREMENT列分配自定义值,因此您的方案的解决方法是在插入行时分配Max(SI_No)+1的值。在这种情况下,您将确保仅在实际插入行时才添加下一个递增值。

典型语法如下   INSERT INTO TABLENAME (ID,SOMECOLUMN) VALUES ((SELECT MAX(ID)+1 NEWID FROM TABLENAME) ,someValue);

注意: - 它可以防止您在插入和最后一行删除情况下看到的间隙。如果你删除两者之间的行,你仍然会看到Gaps,但我认为这对你来说应该没问题

答案 1 :(得分:0)

你能加入你的PHP代码和表结构吗?我认为插入查询正在执行,即使条件失败。

答案 2 :(得分:0)

这是INSERT ... SELECT的预期行为,或者当INSERT语句失败或回滚时。 innodb_autoinc_lock_mode设置也可以影响行为。当为AUTO_INCREMENT列提供值或删除行时,我们也会看到这一点。

AUTO_INCREMENT的行为定义相当明确。它主要用于生成独特的价值观。它并非旨在防止出现差距。

答案 3 :(得分:0)

由于@ juergen d,

得到了这个问题的答案 这应该是查询:

    String queryString = "INSERT INTO hcl_candidates(SL_No,candidate,phone,pan,mailid) SELECT MAX(SL_No)+1, ?, ?, ?, ? FROM hcl_candidates";