2013-10-18 79 views
0

所以我有一個數據庫來保存庫存信息。由於工作人員更新該信息是因爲其在線遇到問題,因爲他們在更改號碼時需要最後一個人更新號碼並將其用於所有值。數據庫 - mySQL和PHP更新衝突的更新信息

示例:Joe更新蔓越莓剩下3個,並且在3時仍不接觸沙拉。但john更新了沙拉爲0.當Joe按下更新時,沙拉的值重新設置爲3,因爲他們的系統認爲他是也更新它。

任何方式,我可以解決這個問題??

+0

你可以發表一些代碼和更深入的描述嗎?蔓越莓沙拉聽起來不錯。 – dudemanbearpig

+0

您可以發佈您正在使用的sql語句,可能沒有使用正確的where語句。 –

回答

1

如果兩個用戶使用相同的圖形用戶界面,其中兩個值(小紅莓和沙拉),可以一次性更改(例如,通過按保存按鈕),您可以:

  1. 使用JavaScript將信息存儲在隱藏字段的值已由用戶更改,然後在使用PHP保存數據時使用此值來省略未更改的值。
  2. 將每個屬性的原始值存儲在隱藏字段中,並使用它將其與來自保存的用戶的新值進行比較以省略保存未更改的值。
  3. 修改您的GUI(如添加複選框來解鎖輸入其中值被改變
  4. 使用記錄的版本,以防止第二個用戶改變,因爲diplaying該用戶已被更改的記錄。然後你可以打印如「對不起,這個紀錄一直以來顯示改變的消息,請刷新頁面之前進行更改。

選擇你最喜歡的一個。

+0

哇。愛它。我會試一試,看看它是如何發展的。 –

+0

享受:)。就我個人而言,我最喜歡4號。 – Rafi

+0

我會的,我同意這將是最好的解決方案,但它的使用非常多,如果每次我都會被要求立即刪除它時彈出。大聲笑 –

0

這是一個常見問題。

您可以:

+0

我想我並不是第一個遇到這個問題的人。我立即想到了LOCK,但是它的使用頻率很高,我不能隨時鎖定任何人。我認爲你的「數量=數量-2」和隱藏值的組合可以檢查是否會解決問題。 –

1

聲音(有點)像一個併發問題,但也許不是因爲我們正在談論兩個不同的領域。看看鎖定:http://dev.mysql.com/doc/refman/5.0/en/internal-locking.html

你可能希望看看喬如何獲取他的信息,因爲如果仍然設置3沙拉和約翰拿他們,然後喬的觀點不知道三個沙拉都消失了,當他點擊更新(假設他的觀點中他所有的信息都被髮送到數據庫),他無意中將沙拉放回原處。

0

部分的問題似乎是你的SQL的方式如果用戶沒有改變記錄的值,就不應該有新的寫入t記錄。

通過使用事務,您可以檢查自該進程啓動以來該值是否已更改。這允許您提交或回滾事務,具體取決於結果。

MySQL Transactions

例如,如果用戶A檢查出的5個可用沙拉3。在用戶A完成這個過程之前,用戶B也嘗試檢出5種可用沙拉中的3種。使用事務,您可以提供邏輯來檢查確保有足夠的沙拉在提交之前完成事務。如果檢查失敗,則可以回滾事務。這將阻止用戶B檢出更多可用的沙拉,即使顯示可能已經指示當交易開始時有5個可用。

+0

它不是真的如何建立我的系統,但我會試一試,謝謝! –