2013-07-25 102 views
0

我正在嘗試構建一個數據庫,用於在某些測試中存儲結果。問題在於這些測試是在並行和單獨的進程中運行的,並且在每個進程完成後,它會將結果提交到數據庫。現在我知道MySQL被設計來處理這種情況,像InnoDB這樣的引擎可以實現行級鎖定。MySQL多個進程寫入

  1. 如果一個進程將訪問鎖定表或項,這將是過程被阻塞,直到調查表或進入解鎖或將查詢緩存,這個過程可以正常終止?
  2. 當一個進程在服務器關閉時嘗試連接服務器,會發生什麼情況,或者由我來處理呢?

任何幫助,高度讚賞。

回答

1

數字2取決於您,當mysql_connect()或您用於連接數據庫的任何內容將引發異常時,您會做什麼。數字1問題將在MySQL級別解決,具體取決於您的進程需要使用鎖定的表或行進行操作。通常,這會導致查詢訪問鎖定區域中的數據的臨時延遲,但如果其他進程鎖定表/行一段時間,則可能會返回過期錯誤。還有一個相互鎖定是可能的,比如說進程A鎖定了第1行,而進程B鎖定了第2行,並且A想要來自第2行的數據並且B想要來自第1行的數據。這被稱爲「死鎖」,並且選擇了其中一個進程作爲死鎖受害者,其查詢返回失敗。