mysql有很多這種鎖機(jī)制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖;這些鎖統(tǒng)稱為悲觀鎖(pessimistic lock)。下面本篇就來帶大家了解一下mysql中的鎖,介紹表鎖和行鎖的區(qū)別,希望對(duì)你們有所幫助。
鎖是計(jì)算機(jī)協(xié)調(diào)多個(gè)進(jìn)程或線程并發(fā)訪問某一資源的機(jī)制。在數(shù)據(jù)庫中,除傳統(tǒng)的 計(jì)算資源(如CPU、RAM、I/O等)的爭(zhēng)用以外,數(shù)據(jù)也是一種供許多用戶共享的資源。如何保證數(shù)據(jù)并發(fā)訪問的一致性、有效性是所有數(shù)據(jù)庫必須解決的一 個(gè)問題,鎖沖突也是影響數(shù)據(jù)庫并發(fā)訪問性能的一個(gè)重要因素。從這個(gè)角度來說,鎖對(duì)數(shù)據(jù)庫而言顯得尤其重要,也更加復(fù)雜。
mysql中表鎖和行鎖的區(qū)別
行鎖
特點(diǎn):鎖的粒度小,發(fā)生鎖沖突的概率低、處理并發(fā)的能力強(qiáng);開銷大、加鎖慢、會(huì)出現(xiàn)死鎖
加鎖的方式:自動(dòng)加鎖。對(duì)于UPDATE、delete和INSERT語句,InnoDB會(huì)自動(dòng)給涉及數(shù)據(jù)集加排他鎖;對(duì)于普通select語句,InnoDB不會(huì)加任何鎖。
表鎖
特點(diǎn):開銷小、加鎖快、無死鎖;鎖粒度大,發(fā)生鎖沖突的概率高,高并發(fā)下性能低
加鎖的方式:自動(dòng)加鎖。查詢操作(SELECT),會(huì)自動(dòng)給涉及的所有表加讀鎖,更新操作(UPDATE、DELETE、INSERT),會(huì)自動(dòng)給涉及的表加寫鎖。