1,讀寫鎖
? ? ? ? 讀鎖是共享鎖朽基,所有讀操作都可以獲取布隔,寫鎖是拍他鎖,可以阻塞其他讀和寫操作
2稼虎,鎖粒度
????????表級別的鎖和行級別的鎖衅檀,表鎖是開銷最小的鎖,會將整張表鎖住霎俩,一個用戶在對表進行寫操作時哀军,需要先獲取寫鎖,這會阻塞其他用戶對該表的所有讀寫操作打却,只有沒有寫鎖時杉适,其他讀取的用戶才能獲取讀鎖,讀鎖之間互不干擾柳击。
3猿推,行及鎖
? ? ? ? 行及鎖可以最大程度的支持并發(fā)處理,但同時也帶來了巨大的鎖開銷捌肴,mysql innodb的行及鎖只在存儲引擎層實現(xiàn)蹬叭,服務器層沒有實現(xiàn)。
4状知,事務特性 ACID
? ? ? ? A:原子性 一個事務必須被視為一個不可分割的最小執(zhí)行單元秽五,整個事務要么成功要么失敗回滾,不可能只執(zhí)行事務的一部分饥悴。
? ? ? ? C:一致性 數(shù)據(jù)庫總是從一個一致性狀態(tài)轉為另一個一致性狀態(tài)筝蚕。
? ? ? ? I:隔離性 一個事務所做的修改在提交前對于其他事務是不可見的卦碾。
? ? ? ? D:一旦事務提交,其所做的修改就會永久保存到數(shù)據(jù)庫中
5起宽,事務的隔離級別
? ? ? ? read uncommitted
? ? ? ? ? ? ? ? 讀未提交洲胖,事務的修改,即使沒有提交也會被其他事物看見坯沪,事務可以讀取未提交的數(shù)據(jù)绿映,稱為臟讀
? ? ? ? read committed
? ? ? ? ? ? ? ? 大多數(shù)數(shù)據(jù)庫的默認隔離級別是讀已提交,mysql除外腐晾,一個事務從開始執(zhí)行到提交叉弦,所做的修改只有在提交之后才會對其他事務可見。也叫不可重復讀
? ? ? ? repeatable read?
? ? ? ? ? ? ? ? 可重讀藻糖,同一個事務中多次讀取同樣記錄的結果是一致的淹冰,但在理論上,可重復讀無法解決幻讀的為題巨柒,當事務在讀取某個范圍內的數(shù)據(jù)時樱拴,如果其他事務做了插入操作,同一事務前后兩次讀取的結果就會不一致洋满,innodb通過mvvc晶乔,多版本并發(fā)控制解決了幻讀的問題
? ? ? ? serializable
? ? ? ? ? ? ? ? 強制控制事務串行執(zhí)行,在事務讀取所有記錄上加鎖牺勾,但為造成大量的鎖爭用和超時正罢。
6,死鎖
? ? ? ? 死鎖是指兩個或多個事務在同一資源上相互占用驻民,并請求鎖定對方占用的資源翻具,從而產(chǎn)生惡性循環(huán)的現(xiàn)象。
? ? ? ? mysql innodb處理的死鎖的方法是:將持有最少行及拍他鎖的事務進行回滾回还,死鎖的產(chǎn)生有雙重原因呛占,有些是因為真正的數(shù)據(jù)沖突,通常難以避免懦趋,有些是因為存儲引擎的實現(xiàn)方式導致的晾虑。