我有一张发票表,其中存储了每张发票的单个记录,其中id列(int AUTO_INCREMENT
)是主键,但也包含发票参考号。
现在,不幸的是,我不得不手动迁移在旧系统上生成的一些发票,这些发票具有五位数字ID,而不是当前系统使用的四位数发票。
然而,即使我将AUTO_INCREMENT
通过PhpMyAdmin(表操作)重置回下一个四位数ID,它仍然会插入一个五位数字,即当前表中的较高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
那么这并不重要,因为该公司每年都不会生成那么多发票,所以这将在随后的一年中发生,因此不会导致希望有问题。
我真的很感激我发现自己陷入困境的任何帮助!非常感谢
答案 0 :(得分:1)
我建议的第一件事就是放弃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执行相同操作,但重新导入更安全。