我有一张包含发票的表格。这些发票是通过我编写的VB.NET程序插入的。使用自动递增,我的发票可以获得发票。
我现在有发票方式 1055 1056 1057 ...
我还有另一个生成发票的数据库(来自另一个购买的软件程序),我使用cron作业将某些发票导入我的主表,但是它们得到前缀99.这些发票没有相同的序列。我不使用自动增量来编号,但我使用原始ID(来自其他数据库)+ 99前缀。在我的主表中,我有来自二级数据库的invoiceid,如下所示:
992013055 992013064 992013078
所以,这使我的主表看起来像这样:
992013055 1055 1056 992013064 1057 992013078 ...
现在问题是,我希望自动增量仅遵循'主'序列。所以在上面的例子中,下一个自动增量值应该是1058,但是使用正常的自动增量它将是992013079。 有没有办法强迫这个?或者我应该在cron作业之后“重置”自动增量值,例如“ALTER TABLE发票AUTO_INCREMENT = bla +1”。我猜'bla'应该是一个新的选择,以获得不以99开头的列中的最高值,不知道如何做到这一点。当我收到9900的发票时,这将是一个问题。
谢谢
答案 0 :(得分:3)
我会创建另一个链接在此外部ID中的列或表,并且不要尝试将它们分层到您的id列中,就像您正在尝试一样。
例如,添加一个名为external_id的列,并简单地用99个值填充该列 - 并保持自动增量值与常规数字一致。
答案 1 :(得分:0)
不,你不能。即使你尝试了ALTER TABLE invoices AUTO_INCREMENT=bla +1
命令,它也行不通,因为MySQL确保AUTO_INCREMENT
的值高于列中的最高值。
基本上,您不应该将自动增量列中的值用于除主键之外的任何其他内容,这样您就不必真正关心这些值是什么以及它们遵循的顺序。毕竟没有人看到他们,他们只被电脑使用。
但是,如果您将这些值用于最终用户可见的内容......那么您的用户只需调整一下这一事实,即他们的调用现在从99
开始。要么就是这样,要么你需要对它们重新编号,这很糟糕,可能会给你的数据带来错误。