我有一个发票表,它为每张发票存储一条记录,id 列 (int AUTO_INCREMENT
) 是主键,也是发票引用号。
现在,不幸的是,我不得不手动迁移一些在旧系统上生成的发票,这些发票具有五位数 ID,而不是当前系统使用的四位数 ID。
但是,即使我通过 PhpMyAdmin(表操作)将 AUTO_INCREMENT
重置回下一个四位数 ID,它仍然会插入一个五位数的 1,即表中当前较高的 ID 加一。
通过搜索,似乎我实际上需要更改 insert_id
以及 AUTO_INCREMENT
?我尝试执行 ALTER TABLE invoices SET insert_id=8125
以及 ALTER TABLE invoices insert_id=8125
但这些命令似乎都无效。
任何人都可以解释我可以重置 AUTO_INCREMENT
的正确方法,以便它将插入 ID 为 8125
的记录,然后当它到达 10962 时
它将跳过我手动添加的四个记录,并继续从 10966
开始的顺序 id。如果它不会跳过 10962
- 10966
那么这并不重要,因为公司每年不会生成那么多发票,所以这将发生在下一年因此希望不会引起问题。
对于我所处的这种棘手情况,如果能提供任何帮助,我将不胜感激!非常感谢
最佳答案
我建议的第一件事是放弃 PHPMyAdmin,因为它是用于 MySQL 的最糟糕的“应用程序”之一。获得适当的 GUI。我最喜欢的是SQLYog .
现在开始讨论这个问题。永远不要篡改主键,不要像您所说的那样尝试“重置”它或更新具有数据库生成的整数的列。至于为什么,这个话题很宽泛,可以在另一个问题中讨论,只是一旦设置好就永远不要触摸主键。
第二件事是有人正在删除发票记录,因此自动增量现在是 10k+ 而不是 8k+。这不是一件坏事,但如果您的发票需要顺序值(例如发票 1 和 5 之间不能有间隙),则使用一个名为 sequence_id 或 invoice_ref 的额外字段并使用触发器来计算该数字。不要依赖 auto_increment 功能,它会重用通过 DELETE 操作丢失的数字。
或者,您可以导出一直在使用的数据库,找到发票表的 CREATE TABLE
定义,然后找到显示“AUTO_INCREMENT = [some number]”的行"并删除该声明。导入到您的新数据库中,auto_increment 将从最新的发票继续。您可以使用 ALTER TABLE 执行相同的操作,但重新导入更安全。
关于MySQL PhpMyAdmin : Alter AUTO_INCREMENT and/or INSERT_ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7092629/