插入重复记录时限制MYSQL上的自动增量

时间:2015-06-04 11:10:47

标签: php mysql

当我去插入重复值并忽略该值以插入列' tagName'然后id正在自动增加,但我不需要跳转ID我在这里有一个有两列的表 - INNODB - ID(autoincrement), tagName(unique varchar)

执行INSERT IGNORE INTO tablename SET tagName="something"时,即使忽略插入,自动增量Id值也会增加。

例如,我显示3行但ID错误。

ID   tagName
1    test
8    test111
29   test2222

我不想使用子查询

由于

1 个答案:

答案 0 :(得分:1)

如果我正确地阅读您的问题,那么您要问的是,如果您尝试插入行并且插入失败,您是否可以停止自动增量递增。

您正在观察的行为是一种深思熟虑的设计选择,几乎所有主要数据库(MySQL,Oracle,PostgreSQL,SQLite等)也都这样做,因为自动增量列几乎总是用于给出一个新行一个唯一的ID,如果您尝试插入一行,则从自动增量中为其分配下一个可用值,然后自动递增。

如果插入失败但几乎同时发生的另一个成功,则该新行的ID已经被修复。一旦它被建立,改变行的ID就被认为是非常糟糕的做法,特别是在使用外键的数据库中,因此只需在编号中存在间隙就是比尝试更新自插入失败发生的时间内插入的所有行更好的方法,尤其是当您更新所有这些行时,可能正在插入更多新行。这将成为数据库处于不一致状态的窗口。

简而言之,在插入失败(OCD除外)之后回滚自动增量值没有充分的理由以及没有将其回滚的充分理由。