MySQL 鎖相關

找工作有一段時間了,基本上是被虐的體無完膚,說明一個問題,自己以爲對的學習方式是不對的,或者說不是很高效。

心血來潮,想開始寫一些博客記錄一下,學習的歷程,也不知道能堅持多久。。。。


——————正文——————


MySQL 鎖機制


1、MySIAM 存儲引擎

支持的類型是表鎖,表共享讀鎖(Table Read Lock),表獨佔寫鎖(Table Write Lock


詳情見這個 https://www.cnblogs.com/leedaily/p/8378779.html  


樂觀鎖

一、在對數據庫中進行操作時,認爲肯定會有其他的操作會跟我們的修改產生衝突,所以每次操作都會上一個鎖。


  • 共享鎖(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE

  • 排他鎖(X):SELECT * FROM table_name WHERE ... FOR UPDATE


注意事項:

1、是根據索引來對行進行鎖定的,如果用的是非索引字段則會將表鎖住。

2、行/表 被鎖定後,其他腳本可以正常讀取記錄,但是如果修改記錄的話,則會被阻塞,直到排他鎖被 commit

3、對於UPDATE、DELETE和INSERT語句,InnoDB會自動給涉及數據集加排他鎖(X)


樂觀鎖:認爲操作不會有數據衝突,數據庫是不支持的,需要我們用代碼邏輯實現,一般是通過數據庫增加一個version字段來進行控制

1、表中增加一個version字段,每次對數據進行更新後,進行值+1操作。然後通過之前查出來的version值,如果一致則完成,不一致則返回錯誤


https://www.cnblogs.com/laoyeye/p/8097684.html 參考這篇文章




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章