技術複習-數據鎖和數據庫事務

1、數據庫鎖

1.讀寫鎖

排它鎖 簡稱X鎖(Exclusive)

一個事務對數據對象(庫、表、頁、行)A加X鎖,能夠對A進行讀寫操做,其餘事務不能再加X鎖或S鎖。mysql

共享鎖 簡稱 S鎖(Share)

一個事務對數據對象(庫、表、頁、行)A加S鎖,只能對A進行讀操做,不能進行寫操做,其餘事務只能加S鎖,不能加X鎖。sql

2.意向鎖

要加行鎖的話,先要在表級別加上IX或者IS,表示下面已經有行級別的X或S鎖,不用再一個個檢查。 表級別存在,X、S、IX、IS鎖。IX,IS是表級鎖,不會和行級的X,S鎖發生衝突。只會和表級的X,S發生衝突數據庫

3.其餘鎖

悲觀鎖:

先獲取鎖以後再作更新等其餘操做。由於要先獲取鎖再作操做,因此須要在事務中操做。適合鎖衝突比較高、重試代價比較大的場景網絡

樂觀鎖:

先獲取數據並獲得時間戳或者版本號,在更新等其餘操做的時候再去Check,在不在事務中無所謂。適合高併發,鎖衝突機率比較低場景。併發

MySQL 的 InnoDB 會根據隔離級別在須要的時候自動加鎖,而且全部的鎖都是在同一時刻被釋放,這被稱爲隱式鎖定。 InnoDB 也可使用特定的語句進行顯示鎖定: SELECT … LOCK In SHARE MODE; SELECT … FOR UPDATE;oracle

2、數據庫事務

1.事務定義 (Trasnsaction)

對系統中數據的查詢、變動操做所組成的邏輯單元。高併發

1.事務的4個基本特徵-ACID Atomicity 原子性 總體視爲一個操做,要麼所有成功,要麼所有失敗。任何一個分步驟失敗都認爲所有失敗。 Consistency 一致性 事務執行先後數據處於一致性狀態,如A給B轉錢,則A減B加,不能出現A減,B不動。 Isolation 隔離性 事務和事務之間是隔離的,相互不干擾。 Duration持久性 事務提交以後,數據變動結果不受網絡、宕機等影響。code

2.數據庫事務隔離級別

併發的事務之間會存在問題,爲此數據庫對併發事務之間的隔離作了分級。通常分爲read uncommitted、read committed、 repeatable read、serializable對象

併發事務產生的問題

1.髒讀
A事務讀到B事務未提交的數據。
2.不可重複讀
A事務內讀取屢次同一個數據值不同。
3.幻讀
A事務執行過程當中,其餘事務插入、刪除數據。
如A事務把某個表中的某字段進行了更新,在更新過程當中又有新的數據插入,這時候新數據就沒有被更新。

數據庫事務隔離級別

  • read uncommitted 讀未提交, 存在髒讀、不可重複讀、幻讀問題
  • read committed 讀已提交, 存在不可重複讀、幻讀問題
  • repeatable read 可重複讀 存在幻讀問題
  • serializable 串行化 不存在問題,效率低

通常數據庫中都會有默認的隔離級別。mysql是repeatable、oracle和oceanbase是read commited,這裏oracle和oceanbase是經過其餘方式解決掉不可重複讀問題的。事務

相關文章
相關標籤/搜索