mysql樂觀鎖解決并發(fā) 數(shù)據(jù)庫高并發(fā)請求,如何保證數(shù)據(jù)完整性?
數(shù)據(jù)庫高并發(fā)請求,如何保證數(shù)據(jù)完整性?所謂的并發(fā)可以從它不是并行的概念中看出。從用戶的角度來看,有一種同時執(zhí)行的假象,但它在數(shù)據(jù)庫中確實(shí)是串行的,或者在某個粒度上是串行的。以更新表中的一行數(shù)據(jù)為例,更
數(shù)據(jù)庫高并發(fā)請求,如何保證數(shù)據(jù)完整性?
所謂的并發(fā)可以從它不是并行的概念中看出。從用戶的角度來看,有一種同時執(zhí)行的假象,但它在數(shù)據(jù)庫中確實(shí)是串行的,或者在某個粒度上是串行的。
以更新表中的一行數(shù)據(jù)為例,更新時會鎖定更改后的數(shù)據(jù)行,避免其他進(jìn)程訪問該行,從而避免數(shù)據(jù)沖突。
此外,還有其他類型的鎖,以適應(yīng)不同的場景。因此,在我們所謂的并發(fā)場景中,不存在數(shù)據(jù)問題。
mysql默認(rèn)是樂觀鎖?
樂觀鎖,悲觀鎖,這兩個概念你需要了解,以便更好地理解。樂觀鎖:與悲觀鎖相對應(yīng),不是數(shù)據(jù)庫本身帶來的,需要自己實(shí)現(xiàn)。悲觀鎖:與樂觀鎖相對應(yīng),由數(shù)據(jù)庫自身實(shí)現(xiàn)。要使用,我們可以直接調(diào)用與數(shù)據(jù)庫相關(guān)的語句。悲觀鎖涉及到另外兩個鎖的概念:共享鎖和獨(dú)占鎖。只有理解和實(shí)踐,才能更好地理解這些具體的東西。我希望我的回答能對您有所幫助
MySQL使用行鎖、表鎖、讀鎖、寫鎖等,這些都是在操作前鎖定的。這些鎖統(tǒng)稱為悲觀鎖。
MySQL鎖概述:
與其他數(shù)據(jù)庫相比,MySQL的鎖機(jī)制相對簡單,最顯著的特點(diǎn)是不同的存儲引擎支持不同的鎖機(jī)制。例如,MyISAM和內(nèi)存存儲引擎使用表級鎖定;BDB存儲引擎使用頁級鎖定,但也支持表級鎖定;InnoDB存儲引擎既支持行級鎖定,也支持表級鎖定,但默認(rèn)使用行級鎖定。
表級鎖:成本低,鎖定速度快;無死鎖;鎖粒度大,鎖沖突概率最高,并發(fā)性最低。
行級鎖:成本高、鎖定慢、死鎖、最小鎖定粒度、鎖沖突概率最低、并發(fā)性最高。
頁鎖:表鎖和行鎖的開銷和鎖定時間是有限的,會產(chǎn)生死鎖;表鎖和行鎖的鎖定粒度是有限的,并發(fā)度一般
從以上特點(diǎn)來看,一般很難說哪個鎖更好,只有哪個鎖更適合根據(jù)具體應(yīng)用的特點(diǎn)!從鎖的角度來看,表級鎖更適合于以查詢?yōu)橹?,只根?jù)索引條件更新少量數(shù)據(jù)的應(yīng)用,比如web應(yīng)用,而行級鎖更適合于根據(jù)索引條件更新大量不同數(shù)據(jù)并進(jìn)行并發(fā)查詢的應(yīng)用,如一些聯(lián)機(jī)事務(wù)處理(OLTP)系統(tǒng)。
MySQL中的鎖(表鎖、行鎖、共享鎖、獨(dú)占鎖、間隙鎖)