1

我有一个 invoices 表,它为每张发票存储一条记录,其中 id 列 ( int AUTO_INCREMENT) 是主键,但也是发票参考号。

现在,不幸的是,我不得不手动迁移在旧系统上生成的一些发票,这些发票具有五位数的 ID,而不是当前系统使用的四位数。

但是,即使我将AUTO_INCREMENT通过 PhpMyAdmin(表操作)重置为下一个四位数的 id,它仍然会插入一个五位数的 1,即当前表中较高的 id 加一。

通过四处搜索,似乎我实际上需要更改insert_id以及AUTO_INCREMENT? 我尝试过执行ALTER TABLE invoices SET insert_id=8125ALTER TABLE invoices insert_id=8125但这些命令似乎都不是有效的。

谁能解释我可以重置的正确方法,AUTO_INCREMENT以便它将插入带有 id 的记录8125,然后当它到达时,10962它将跳过我手动添加的四个记录,并从头10966开始继续顺序 id。如果它不会跳过10962-10966那么这并不重要,因为公司每年不会产生那么多发票,所以这将在接下来的一年发生,因此希望不会造成问题。

对于我发现自己所处的这种棘手情况,我非常感谢任何帮助!非常感谢

4

1 回答 1

1

我建议的第一件事是放弃 PHPMyAdmin,因为它是用于与 MySQL 一起工作的最糟糕的“应用程序”之一。获得适当的 GUI。我最喜欢的是SQLYog

现在谈谈这个问题。永远不要篡改主键,不要像你说的那样尝试“重置”它或更新具有数据库生成的整数的列。至于为什么,这个话题很广泛,可以在另一个问题中讨论,只是一旦你设置了主键,就永远不要碰它。

第二件事是有人正在删除发票记录,因此自动增量现在是 10k+ 而不是 8k+。这不是一件坏事,但如果您需要发票的顺序值(例如发票 1 和 5 之间不能有间隙),则使用名为 sequence_id 或 invoice_ref 的额外字段并使用触发器来计算该数字。不要依赖 auto_increment 功能,它会重用通过 DELETE 操作丢失的数字。

或者,您可以做的是导出您一直在使用的数据库,找到CREATE TABLEinvoices 表的定义,然后找到显示“AUTO_INCREMENT = [some number]”的行并删除该语句。导入到您的新数据库中,auto_increment 将从最新的发票继续。您可以使用 ALTER TABLE 来做同样的事情,但是重新导入更安全。

于 2011-08-17T12:26:12.497 回答