我有一个发票表 (innoDB),我需要在其中手动设置下一张发票的累进编号。我现在的代码是
SELECT MAX(invoice_n) FROM invoices WHERE invoice_y = 2013
然后定期保存记录,将新的 invoice_n = max + 1。我在 invoice_n-invoice_y 上有一个唯一的索引,我正在记录数据库错误,所以我发现有时我有重复的键输入错误,因为我有数百个不同的用户连接。我将代码放在一个循环中,一直持续到生成发票为止,但我认为可以有更优雅的解决方案,尤其是使用事务。我读了一点书,但我不明白如何通过交易实现我的结果。
有什么帮助吗?
最佳答案
你可以使用 "AUTO_INCREMENT"在您的列定义中。如果插入失败,您会看到数字之间有一些空隙。
另一种方法是创建一个包含每年最后一个索引的表(请参阅评论)并按照以下步骤操作:
- 开始交易
- 选择更新每行的最后一个索引并递增
- 插入新发票
- 提交您的交易
一些链接:
另一个,您可以使用“乐观的方法”,如果因为重复的键而失败,则重复选择和插入。
希望对您有所帮助,欢迎大家留言!
关于Mysql手动自增并发连接数证明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14457042/