小编典典

INSERT IGNORE会增加自动递增计数器,即使未添加任何记录也是如此?

sql

MySQL中, 我使用了INSERT IGNORE语句将行插入到表中。由于一列是UNIQUE,因此未插入某些行(因为它们已经在那里)。执行完该语句后,我注意到自动递增列在行之间缺少一些数字,后来我意识到这是由于忽略和未添加行而导致的。

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


阅读 190

收藏
2021-04-14

共1个答案

小编典典

INSERT手册页中引用:

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

INSERT IGNORE语法只是为了抑制某些错误消息的方式,当你意识到这些错误可能发生和/或希望在以后的阶段来处理他们这是有帮助的。在幕后,您仍然有一个常规的插入内容,只是由于密钥被破坏而导致插入失败。MySQL需要实际的行值进行插入,并且AUTO_INCREMENT计数器将根据常规规则递增:

  1. 该列的值为NULL。
  2. 未设置该列的值。
  3. 该列的值大于计数器。

因此,除非您可以重新考虑逻辑(例如,在进行插入之前测试键值是否存在),否则 重置 计数器的唯一方法是ALTER
TABLE

ALTER TABLE t2 AUTO_INCREMENT = value;
2021-04-14