一個事務對數據對象(庫、表、頁、行)A加X鎖,能夠對A進行讀寫操做,其餘事務不能再加X鎖或S鎖。mysql
一個事務對數據對象(庫、表、頁、行)A加S鎖,只能對A進行讀操做,不能進行寫操做,其餘事務只能加S鎖,不能加X鎖。sql
要加行鎖的話,先要在表級別加上IX或者IS,表示下面已經有行級別的X或S鎖,不用再一個個檢查。 表級別存在,X、S、IX、IS鎖。IX,IS是表級鎖,不會和行級的X,S鎖發生衝突。只會和表級的X,S發生衝突數據庫
先獲取鎖以後再作更新等其餘操做。由於要先獲取鎖再作操做,因此須要在事務中操做。適合鎖衝突比較高、重試代價比較大的場景網絡
先獲取數據並獲得時間戳或者版本號,在更新等其餘操做的時候再去Check,在不在事務中無所謂。適合高併發,鎖衝突機率比較低場景。併發
MySQL 的 InnoDB 會根據隔離級別在須要的時候自動加鎖,而且全部的鎖都是在同一時刻被釋放,這被稱爲隱式鎖定。 InnoDB 也可使用特定的語句進行顯示鎖定: SELECT … LOCK In SHARE MODE; SELECT … FOR UPDATE;oracle
對系統中數據的查詢、變動操做所組成的邏輯單元。高併發
1.事務的4個基本特徵-ACID Atomicity 原子性 總體視爲一個操做,要麼所有成功,要麼所有失敗。任何一個分步驟失敗都認爲所有失敗。 Consistency 一致性 事務執行先後數據處於一致性狀態,如A給B轉錢,則A減B加,不能出現A減,B不動。 Isolation 隔離性 事務和事務之間是隔離的,相互不干擾。 Duration持久性 事務提交以後,數據變動結果不受網絡、宕機等影響。code
併發的事務之間會存在問題,爲此數據庫對併發事務之間的隔離作了分級。通常分爲read uncommitted、read committed、 repeatable read、serializable對象
A事務讀到B事務未提交的數據。
A事務內讀取屢次同一個數據值不同。
A事務執行過程當中,其餘事務插入、刪除數據。 如A事務把某個表中的某字段進行了更新,在更新過程當中又有新的數據插入,這時候新數據就沒有被更新。
通常數據庫中都會有默認的隔離級別。mysql是repeatable、oracle和oceanbase是read commited,這裏oracle和oceanbase是經過其餘方式解決掉不可重複讀問題的。事務