即使没有添加记录,INSERT IGNORE也会增加自动增量计数器?

时间:2012-04-25 15:40:12

标签: mysql sql insert auto-increment

MySQL 中,我使用INSERT IGNORE语句向表中插入行。因为一列是UNIQUE,所以没有插入一些行(因为它们已经存在)。在执行该语句之后,我注意到自动增量列在行之间有一些缺失的数字,后来我意识到这是由于被忽略但未添加的行而发生的。

如果没有插入带有IGNORE子句的行,是否可以将系统设置为不增加自动增量计数器

1 个答案:

答案 0 :(得分:1)

引用manual page for INSERT

  

如果使用IGNORE关键字,则执行时会出现错误   INSERT语句被视为警告。例如,没有   IGNORE,一个复制现有UNIQUE索引或PRIMARY KEY的行   表中的值导致重复键错误,语句为   中止。使用IGNORE时,仍未插入行,但没有错误   发出的。

INSERT IGNORE语法只是一种抑制某些错误消息的方法,当您意识到这些错误可能发生和/或想要在以后处理它们时,它会很有用。在幕后,您仍然有一个常规插入,除非它因违反密钥而失败。 MySQL需要实际的行值来进行插入,而AUTO_INCREMENT计数器将根据regular rules递增:

  1. 该列的值为NULL。
  2. 未设置列的值。
  3. 列的值大于计数器。
  4. 因此,除非您可以重新考虑您的逻辑(例如,在插入之前测试键值是否存在),否则重置计数器的唯一方法是ALTER TABLE

    ALTER TABLE t2 AUTO_INCREMENT = value;