1

我有一张包含发票的表格。这些发票是通过我编写的 VB.NET 程序插入的。使用自动增量我的发票得到他们的 invoiceid。

我现在有 invoiceid 之类的 1055 1056 1057 ...

我还有另一个生成发票的数据库(来自另一个购买的软件程序),我使用 cron 作业将某些发票导入到我的主表中,但它们得到前缀 99。这些发票没有相同的顺序。我不使用自动增量对它们进行编号,但我使用原始 ID(来自其他数据库)+ 99 前缀。在我的主表中,我有来自辅助数据库的 invoiceid,如下所示:

992013055 992013064 992013078

所以,这使得我的主表看起来像这样:

992013055 1055 1056 992013064 1057 992013078 ...

现在的问题是,我希望自动增量只遵循“主”序列。所以在上面的例子中,下一个自动增量值应该是 1058,但是使用正常的自动增量它将是 992013079。有没有办法强制这个?或者我应该在 cron 作业之后“重置”自动增量值,例如“ALTER TABLE invoices AUTO_INCREMENT=bla +1”。我猜'bla'应该是一个新的选择,以获得不以99开头的列中的最高值,不知道如何做到这一点。当然,当我收到发票 9900 时,这将是一个问题。

谢谢

4

2 回答 2

3

我会创建另一个列或表来链接此外部 id,并且不要像您尝试的那样尝试将它们分层到您的 id 列中。

例如,添加一个名为 external_id 的列,然后简单地用 99 个值填充该列 - 并保持您的自动增量值与您的常规数字一起正确调整。

于 2013-08-27T20:17:32.233 回答
0

不,你不能。即使您尝试了该ALTER TABLE invoices AUTO_INCREMENT=bla +1命令,它也不起作用,因为 MySQL 确保 的值AUTO_INCREMENT高于列中的最大值。

基本上,您不应该将自动增量列中的值用于主键以外的任何内容,这样您就不需要关心这些值是什么以及它们遵循的顺序。毕竟没有人看到它们,它们只被计算机使用。

但是,如果您将这些值用于最终用户可见的内容……那么您的用户只需要适应这样一个事实,即他们的调用从99现在开始。要么这样,要么你需要重新编号它们,这是一项艰巨的工作,并且可能会给你的数据带来错误。

于 2013-08-27T20:11:22.493 回答