1

我有一个发票表(innoDB),我需要在其中手动设置下一张发票的累进编号。我现在的代码是

SELECT MAX(invoice_n) FROM invoices WHERE invoice_y = 2013

然后定期保存记录,放置新的 invoice_n = max + 1。我在 invoice_n-invoice_y 上有一个索引 UNIQUE,我正在记录数据库错误,所以我看到有时我有重复的键输入错误,因为我有数百个不同的连接的用户。我将代码放在一个循环中,一直持续到生成发票,但我认为可以有一个更优雅的解决方案,尤其是使用交易。我读了一点,但我不明白如何通过交易来实现我的结果。

有什么帮助吗?

4

1 回答 1

0

您可以在列定义中使用“AUTO_INCREMENT”。如果插入失败,您将看到数字之间的一些间隙。

另一种选择是使用每年的最后一个索引创建一个表(请参阅评论)并按照以下步骤操作:

  1. 开始交易
  2. 选择更新每行的最后一个索引并增加一个
  3. 插入新发票
  4. 提交您的交易

一些链接:

另一种方法是,您可以使用“乐观方法”,如果由于重复键而失败,则重复选择和插入。

希望对你有帮助,欢迎评论!

于 2013-01-23T00:36:42.027 回答