2014-07-16 37 views
1

我目前正在開發數據庫/網站服務器接口,以方便爲數據收集項目輸入數據。數據庫有兩種類型的添加:A和B.以下是一些在數據庫中處理這些條目的表如下:數據庫併發性問題

dcs_projectname_a
dcs_projectname_b

每一種對所有除之類的創作者,時間戳等

所需的輸入字段的表

網站上的頁面提供了三種不同的選項:添加,查看和編輯。每種類型的條目的每個頁面執行相應的功能。也就是說,添加頁面添加,查看頁面視圖等。

我剛完成;然而,我還沒有真正面對一個重大挑戰:併發性。將有多個用戶同時向數據庫添加內容。每個條目都有自己的特定ID,並且不能有任何重複的ID。也就是說,第一個條目是A000001,下一個是A000002,依此類推。

在添加和編輯頁面上,有一個禁用字段,用於在物理記錄條目時查看其他用途的標識。

我需要弄清楚的是如何實現併發管理,以便當用戶同時添加一個他們不會在同一個id和行下。

添加頁面通過訪問數據庫最近的id並添加一個,自動生成要使用的id。

我的想法是每次打開添加頁面時在表格中創建一個新行併爲其提供計算的ID。然後,當添加信息時,它會對該現有行執行修改。這樣,如果另一個用戶在添加另一個條目時打開添加頁面,它將被賦予未來的ID,而不是同一個。

使用此方法,我需要一種方法來刪除此條目,如果用戶離開添加頁面或關閉瀏覽器。然後,當第一個用戶(或任何其他用戶使用的最少ID)離開他們的添加頁面並取消添加時,我還需要具有打開添加頁面的其他用戶自動更新其ID。

這是一種複雜的解釋,如果你不明白讓我知道,我會盡力回答。任何幫助深表感謝!

感謝

回答

0

有一個號碼給您解決問題的辦法,但你似乎已經具有應用程序生成的記錄ID爲你更難做的事情。

相反,您可以使用MySQL的AUTO_INCREMENT功能爲您自動生成/增加記錄ID(插入時)。 MySQL將確保沒有重複,並且您可以擺脫額外的數據庫調用來檢索最近的ID。

+0

但是,我確實使用了AUTO_INCREMENT作爲名爲「database_id」的單獨字段。我使用數據庫調用的原因是用字母數字ID填充id字段,用戶在輸入該條目的其他信息時可以看到該字段。 – joekleespies

+0

它是否必須是您描述的順序值?否則,你可以生成一個UUID。如果它必須是連續的,我想不出一個簡單的解決方案。最簡單的方法是在列上添加唯一約束,並且如果由於違反約束而導致插入失敗,請再次嘗試使用下一個值。如果你的應用程序負載很重,這將會非常快速地失效。 –