我创建了一个具有条件行插入功能的表,因此有时新行不会插入到列中。这里的问题是,即使行插入失败,auto_inc列也会递增,因此存储在其中的值将是这样的:
Sl No。
1
2
4
7
8
9
它看起来很麻烦请求帮助。谢谢提前
答案 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)
得到了这个问题的答案 这应该是查询:
String queryString = "INSERT INTO hcl_candidates(SL_No,candidate,phone,pan,mailid) SELECT MAX(SL_No)+1, ?, ?, ?, ? FROM hcl_candidates";