在 MySQL中, 我使用了INSERT IGNORE语句将行插入到表中。由于一列是UNIQUE,因此未插入某些行(因为它们已经在那里)。执行完该语句后,我注意到自动递增列在行之间缺少一些数字,后来我意识到这是由于忽略和未添加行而导致的。
INSERT IGNORE
UNIQUE
如果没有在子句中插入行,是否可以将系统设置为不增加 自动递增计数器IGNORE?
IGNORE
从INSERT的手册页中引用:
如果使用IGNORE关键字,则在执行INSERT语句时发生的错误将被视为警告。例如,如果没有IGNORE,则复制表中现有UNIQUE索引或PRIMARY KEY值的行将导致重复键错误,并且该语句将中止。使用IGNORE,仍不会插入该行,但是不会发出错误。
该INSERT IGNORE语法只是为了抑制某些错误消息的方式,当你意识到这些错误可能发生和/或希望在以后的阶段来处理他们这是有帮助的。在幕后,您仍然有一个常规的插入内容,只是由于密钥被破坏而导致插入失败。MySQL需要实际的行值进行插入,并且AUTO_INCREMENT计数器将根据常规规则递增:
因此,除非您可以重新考虑逻辑(例如,在进行插入之前测试键值是否存在),否则 重置 计数器的唯一方法是ALTER TABLE:
ALTER TABLE t2 AUTO_INCREMENT = value;