1.數據庫併發算法
當多個用戶修改數據庫中同一個數據時,須要對用戶的訪問進行併發管理,否則不會出現數據更新丟失,數據髒讀等錯誤;好比線程A和B從數據庫中讀取同一數據爲1,線程A先修改1爲10,線程B接着又將數據修改爲1,那麼A的修改丟失;故須要數據庫對數據加鎖以實現併發管理數據庫
2.悲觀鎖併發
主觀上認爲數據必定會修改,對訪問的數據加鎖,在釋放鎖以前,其餘事務都不能訪問該數據,好比goods表,查詢全部name=「math」的記錄,select * from goods where name = 「math」 for update,對查詢出來的記錄加鎖,其餘悲觀鎖事務均不能讀寫這些記錄,可是select * from goods where name = 「math」能夠讀數據;悲觀鎖通常由數據庫鎖機制實現;悲觀鎖的鎖粒度默認是基於Row-level (表的id明確的狀況下),若是id不明確,則使用Tabel-level。spa
注:使用悲觀鎖會,數據庫不會默認提交更新,不能使用autocommit,開啓事務,完成持久化操做後,須要手動提交事務,commint();線程
3.樂觀鎖版本控制
主觀上認爲數據不會被修改,可是在提交更新數據時會檢測衝突與否,若是衝突,返回用戶錯誤信息,讓用戶決定接下來怎麼作;檢測方法有兩種:1、數據版本控制機制,就是在數據庫表中添加一個version字段,每提交一次更新,version就加1。讀取數據時,把version字段也讀取出來,要修改數據時判斷version和數據庫中version大小,若是數據庫中的version大,說明已經有線程修改過該記錄,向用戶報錯。通常樂觀鎖用在讀操做比較多的狀況下 。其實樂觀鎖的工做原理和無阻塞算法(CAS)相似,CAS也是先獲取值,而後計算值,接着判斷是否有其餘線程修改了值,若是沒有,則本身修改值成功,不然修改值失敗,CAS是原子操做事務
4.併發訪問數據庫人數it
併發訪問人數就是同一時刻和 數據庫有創建鏈接的鏈接數io