2013-01-22 43 views
1

我有一張發票表(innoDB),其中需要手動設置下一張發票的累進數。我的代碼現在Mysql手動自動增量併發連接證明

SELECT MAX(invoice_n) FROM invoices WHERE invoice_y = 2013 

,然後regulary保存記錄把新invoice_n = MAX + 1我有invoice_n-invoice_y索引UNIQUE,我記錄數據庫錯誤,所以我看到,有時我有重複鍵入錯誤,因爲我有數百個不同的用戶連接。我把代碼放在循環中,直到發票生成,但我認爲可以有更優雅的解決方案,特別是使用事務。我讀了一下,但我不明白我怎樣才能達到我的交易結果。

任何幫助?

回答

0

您可以在列定義中使用"AUTO_INCREMENT"。如果插入失敗,您將看到數字之間的一些間隙。

另一種方法是創建一個表,每年的最後一個索引(見註釋),然後按照下面的步驟:

  1. 開始事務
  2. 選擇用於更新每行和增量去年指數在一個
  3. 插入新的發票
  4. 提交事務

一些鏈接:

再一個,你可以使用一個「樂觀態度」,並重複選擇和插入,如果它失敗,因爲重複的鍵。

我希望這可以幫助你,歡迎任何評論!

+0

我無法使用自動增量,因爲我2012年的發票數量爲1,2013年的發票數量爲1。 – mfrascati

+0

我添加了另一個替代方案,看看它是否有幫助。 –

+0

MySQL是否具有生成自動遞增鍵的併發控制?如果不是,這個答案可能有問題。誰能回答我的問題嗎? –