2013-07-12 34 views
1

是否可以使用MySQL獲得給定行上的顯式獨立鎖定?使用MySQL在給定行上顯式鎖定

我要的是:

  • 讀取一行,並獲取其上的鎖;如果該行已被鎖定,等待鎖被釋放
  • 進行一些處理
  • 寫的行,釋放鎖

我認爲SELECT FOR UPDATE將是我的解決方案,但由於它需要明確的事務,我不能做到以下幾點:

  1. 讀&鎖行1
  2. 閱讀&鎖定第2排
  3. 做某事
  4. 寫&釋放行2
  5. 做某事
  6. 寫&發佈第1行

(或顛倒步驟4和6.)

基本上,我希望能夠在任何時候明確獲取任何行上的&版本的鎖,而無需等待使用COMMIT同時釋放所有鎖。因此,沒有交易就做到這一點。

用MySQL可以實現嗎?

回答

0

使用兩個事務(跨兩個數據庫連接);否則,use triggers to make your records read-only

+0

我試圖避免使用盡可能多的連接,因爲有鎖定的記錄,並且不幸的是觸發器不提供故障轉移,以防進程死亡而不解鎖記錄! – Benjamin

+0

這很有趣,因爲使用文件系統似乎是一件容易的事情(鎖定任何文件,隨時解鎖,並且在文件關閉時釋放故障轉移鎖),但看起來相當複雜數據庫! – Benjamin

+0

@Benjamin:*通常*試圖儘可能縮短交易時間,所以步驟4和步驟6之間的時間是非常重要的,以至於這種細節並不重要。第5步中究竟發生了那麼久?是否真的有必要釋放第一個鎖,然後保持第二個鎖? – eggyal