3

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

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

4

1 回答 1

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;
于 2012-04-25T16:20:08.057 回答