mysql並發加for update 沒有鎖住

來源:互聯網
上載者:User
我有一個長事務
在裡面中後段一個行級鎖
經測試,發現並沒有鎖住
但是單獨拿出這部份,又可以鎖住
在我整個長事務中,什麼情況下會影響我的加鎖嗎?
select Id from product_term where Id=".$v['P_Term_id']." for update

回複內容:

我有一個長事務
在裡面中後段一個行級鎖
經測試,發現並沒有鎖住
但是單獨拿出這部份,又可以鎖住
在我整個長事務中,什麼情況下會影響我的加鎖嗎?
select Id from product_term where Id=".$v['P_Term_id']." for update

設定會影響。
其實。。先問個小白的問題。。。是Innodb嗎?之前遇到個Myisam問事務的問題。。
好啦。迴歸正題。
排它鎖正常是會鎖住這個查詢範圍直到事務結束的。
就像你這個。會鎖住對應ID行的那條記錄。
不過根據事務的隔離模式。如果你沒改過設定,預設是RR的。也就是你在這個排它鎖之前,執行的SELECT是相同結果的。。這就會有沒鎖住的假象產生。。

假如你事務是這樣的

BEGIN;SELECT id FROM product_term where id<100;UPDATE product_term SET XXX='YYY' WHERE id = 1;...SELECT id FROM product_term where id=1 FOR UPDATE;...COMMIT;

像這種,由於預設RR級,第一個範圍搜已經包含了id=1的,然後同一個事務下第三個得出來的行會和第一行一樣。而實際上第二行已經改過這行的資料了。如果在2個並發下,就可能造成看起來表沒鎖住的現象~~
排他建議在事務開始的時候做。
不知道你遇到的是不是這個問題?如果是,可以仔細研究下事務的隔離模式,你會發現還有更多的坑

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.