在MySQL中,我使用INSERT IGNORE语句向表中插入行。因为有一列是UNIQUE,所以没有插入一些行(因为它们已经在那里了)。在执行该语句后,我注意到自动增量列在行之间缺少一些数字,后来我意识到这是由于被忽略而没有添加的行造成的。
如果没有插入子句的行,是否可以设置系统不增加自动增量计数器?
发布于 2012-04-25 16:20:08
引用供插入的手册页的话
如果使用“忽略”关键字,则执行INSERT语句时发生的错误将被视为警告。例如,在不忽略的情况下,重复表中现有的唯一索引或主键值的行将导致重复键错误并中止该语句。使用“忽略”时,行仍未插入,但未发出错误。
INSERT IGNORE语法只是一种抑制某些错误消息的方法,当您意识到这些错误可能发生并且/或希望在稍后阶段处理它们时,这是很有帮助的。在幕后,您仍然有一个常规的插入,除了它由于一个违反的键失败。MySQL需要实际行值来进行插入,而AUTO_INCREMENT计数器将根据常规规则递增。
因此,除非您可以重新考虑逻辑(例如,在进行插入之前测试键值是否存在),否则重置计数器的唯一方法是变更表。
ALTER TABLE t2 AUTO_INCREMENT = value;这并不是说差距应该是重要的。如果他们这样做了(例如,您正在生成需要相关的发票号码),那么您可能使用了错误的工具来完成这项工作。
https://stackoverflow.com/questions/10319003
复制相似问题