In MySQL I used INSERT IGNORE
语句将行插入到表中。因为一列是UNIQUE
,某些行未插入(因为它们已经存在)。执行该语句后,我注意到自动增量列在行之间缺少一些数字,后来我意识到这是由于被忽略且未添加的行而发生的。
是否可以设置系统不增加自动递增计数器如果没有插入行IGNORE
clause?
引用自INSERT 手册页:
如果使用 IGNORE 关键字,执行时会发生错误
INSERT 语句被视为警告。例如,没有
IGNORE,重复现有 UNIQUE 索引或 PRIMARY KEY 的行
表中的值导致重复键错误,该语句是
中止了。使用 IGNORE,该行仍然没有插入,但没有错误
发布。
The INSERT IGNORE
语法只是抑制某些错误消息的一种方法,当您意识到这些错误可能发生和/或想要在稍后阶段处理它们时,它会很有帮助。在幕后,您仍然可以进行常规插入,只是由于密钥被破坏而失败。 MySQL 需要实际的行值来进行插入,并且 AUTO_INCRMENT 计数器将根据常规规则:
- 该列的值为 NULL。
- 未设置该列的值。
- 该列的值大于计数器。
因此,除非您可以重新思考您的逻辑(例如,在插入之前测试键值是否存在),否则唯一的方法是reset计数器是修改表:
ALTER TABLE t2 AUTO_INCREMENT = value;
无论如何,差距并不重要。如果确实如此(例如,您正在生成需要关联的发票号码),则您可能使用了错误的工具来完成这项工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)