Mysql手动自动增量并发连接证明

时间:2013-01-22 11:00:30

标签: mysql concurrency transactions

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

SELECT MAX(invoice_n) FROM invoices WHERE invoice_y = 2013

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

任何帮助?

1 个答案:

答案 0 :(得分:0)

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

另一种方法是创建一个每年包含最后一个索引的表(请参阅注释)并按照以下步骤操作:

  1. 开始交易
  2. 选择更新每行的最后一个索引并以一个
  3. 递增
  4. 插入新发票
  5. 提交您的交易
  6. 一些链接:

    另一个,您可以使用“乐观方法”并重复选择和插入,如果它因为重复键而失败。

    我希望这对您有所帮助,欢迎任何评论!