MySQL PhpMyAdmin:改变AUTO_INCREMENT和/或INSERT_ID

时间:2011-08-17 12:17:50

标签: mysql phpmyadmin auto-increment insert-id

我有一张发票表,其中存储了每张发票的单个记录,其中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那么这并不重要,因为该公司每年都不会生成那么多发票,所以这将在随后的一年中发生,因此不会导致希望有问题。

我真的很感激我发现自己陷入困境的任何帮助!非常感谢

1 个答案:

答案 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执行相同操作,但重新导入更安全。