事務的一些小知識

2021-10-05 07:16:54 字數 1672 閱讀 9329

資料庫事務

原子性:組成乙個事務的多個資料庫操作為乙個整體,只有全部成功才能提交,只要乙個失敗就需要全部回滾撤銷。

一致性:事務成功後,資料庫狀態和他的業務規則要一致。

隔離性:不同事物之間不會互相干擾。但實際中並不會要求完全不會干擾,不同的事務隔離級別對於不同的干擾程度。

永續性:一旦事務成功,所有資料都需要被持久化到資料庫中。

資料併發的問題

髒讀:a事務讀到了b事務未提交更改的資料,並在這個資料的基礎上進行操作。如果b事務回滾,a事務的操作就是有問題的。

不可重複讀:a讀取了b事務已提交的資料修改。也就是在同一事物中,多次讀取同一資料發生了不一致。

幻讀:a事務讀取了b事務提交的新增資料,這是會出現幻讀。幻讀和不可重複讀比較類似,區別在於新增和更新。幻讀需要新增表級鎖才能解決,而不可重複讀新增行鎖即可。

第一類資料更新丟失:a事務撤銷時,把b事務提交更新的資料覆蓋了。

第二類資料更新丟失:a事務提交後,把b事務提交更新的資料覆蓋了。

資料庫的鎖機制(mysql)

共享/排他鎖:

共享鎖 s:讀取資料使用,讀讀可並行

排它鎖 x:修改資料使用:寫讀,寫寫不可並行

意向鎖:

表級鎖:innodb為支援多粒度鎖機制,允許表級鎖和行級鎖共存。意向鎖代表,未來的某個時刻,事務可能要加共享或排它鎖,先提前宣告乙個意向。意向鎖只代表意向,所以意向鎖之間可以相容。也就是不同事物可以同時給同一張表新增意向鎖。

意向共享鎖 is:事務可能要新增共享鎖,只有先獲得表的is鎖,才能獲得對應的s鎖

意向排它鎖 ix:事務可能要新增排它鎖,只有先獲得表的ix鎖,才能獲得對應的x鎖。一旦某個事務新增了意向排它鎖或排它鎖,那麼其他事務不能新增普通的排它鎖和共享鎖了。

記錄鎖:封鎖鎖索引記錄,這裡鎖的是索引

鎖的是非主鍵索引,會在索引記錄加鎖然後再去主鍵索引加鎖

表上如果沒有索引,會隱式的在主鍵索引加鎖

如果要鎖的列沒有索引,會在全表記錄加鎖

間隙鎖,封鎖索引記錄中的間隔,防止其他事物插入某個索引記錄區間,並且防止更新資料到區間內。主要用於防止不可重複讀,事務隔離級別降為為rc後,間隙鎖自動失效。

臨鍵鎖:是記錄鎖和間隙鎖的組合,既鎖索引也鎖索引記錄。當索引含有唯一屬性,自動降級為記錄鎖,只鎖本身不鎖範圍。

插入意向鎖:間隙鎖的一種,專門針對insert操作。同索引,同範圍,不同事務插入的位置不衝突,不會阻塞。

自增鎖:專門針對自增字段,保證插入欄位都是連續自增的。表級鎖。

事務隔離級別

讀未提交:最低級別,會造成髒讀,不可重複讀,幻讀

讀已提交:rc級別會對讀取到的記錄加記錄鎖,保證只能讀取到已提交事務的資料,不會出現髒讀,會出現不可重複讀,幻讀。

重複讀:可以解決不可重複讀,但仍存在幻讀問題。mysql用mvcc解決讀寫併發問題,間隙鎖解決寫寫併發問題,從而處理幻讀問題。

序列化:效率低下,但解決了所有問題。

七種事務傳播行為

required:沒有則建立,有則加入

supports:沒有就沒有,有則加入

mandatory:沒有則拋異常,有則加入

required_new:必須用新的,舊事務掛起

not_supported:不使用事務,有則掛起

never:有則拋異常,沒有就以非事務執行

nested:有則巢狀事務內執行,沒有則新建乙個事務

一些小知識

1.答 int elev 10 0.5 10 3答 arctoolbox中有直接的工具!data management tools features feature to polygon 4如何用arcgis實現指定範圍的dem水平切面 主要是想實現dem和水面結合的三維效果 但如何計算水面範圍 答...

QProcess一些小知識

1.啟動外部程式的兩種方式 1 一體式 void start 外部程式啟動後,將隨主程式的退出而退出 2 分離式 void startdetached 外部程式啟動後,當主程式退出時並不退出。而是繼續執行。2.當程式路徑中含有空格的時候,特別是windows系統該程式路徑會無法被識別。解決方法是將程...

Oracle一些小知識

1 select from table name for update 和 select t.t.rowid from table name t的區別 二者都可以編輯表資料,但是前者會鎖表,後者則不會。原理且不深究,當我們修改某一行資料時,如果不想鎖表就是用後者。2 邏輯判斷 select 1 fr...