强制自动增量以遵循另一个序列

时间:2013-08-27 20:03:10

标签: mysql

我有一张包含发票的表格。这些发票是通过我编写的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的发票时,这将是一个问题。

谢谢

2 个答案:

答案 0 :(得分:3)

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

例如,

添加一个名为external_id的列,并简单地用99个值填充该列 - 并保持自动增量值与常规数字一致。

答案 1 :(得分:0)

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

基本上,您不应该将自动增量列中的值用于除主键之外的任何其他内容,这样您就不必真正关心这些值是什么以及它们遵循的顺序。毕竟没有人看到他们,他们只被电脑使用。

但是,如果您将这些值用于最终用户可见的内容......那么您的用户只需调整一下这一事实,即他们的调用现在从99开始。要么就是这样,要么你需要对它们重新编号,这很糟糕,可能会给你的数据带来错误。