前言
資料庫都是有事務的,事務的不同級別,對應資料操作的不同級別安全性。本文以mysql為例介紹一下資料庫的事務隔離級別。
事務定義
事務是將資料從一種狀態改變到另一種狀態。
事務隔離級別是事務看別的事務修改的資料的可見程度。
事務的可見性
髒讀:一事務對資料進行了增刪改,但未提交,另一事務可以讀取到未提交的資料。如果第乙個事務這時候回滾了,那麼第二個事務就讀到了髒資料。
不可重複讀:乙個事務中發生了兩次讀操作,第一次讀操作和第二次操作之間,另外乙個事務對資料進行了修改,這時候兩次讀取的資料是不一致的。
幻讀:第乙個事務對一定範圍的資料進行批量修改,第二個事務在這個範圍增加一條資料,這時候第乙個事務就會丟失對新增資料的修改。
事務的隔離級別
隔離級別
隔離級別的值
導致的問題
read-uncommitted
0導致髒讀
read-committed
1避免髒讀,允許不可重複讀和幻讀
repeatable-read
2避免髒讀和不可重複讀,允許幻讀
serializable
3序列化讀,事務只能乙個乙個執行,避免了髒讀、不可重複讀、幻讀。執行效率慢,使用時慎重
mysql的預設隔離級別是可重複讀。
總結:
隔離級別越高,越能保證資料的完整性和一致性,但是對併發效能的影響也越大。
大多數的資料庫預設隔離級別為 read commited,比如 sqlserver、oracle、postgresql
少數資料庫預設隔離級別為:repeatable read 比如: mysql innodb
使用tips:
綜合而言,因為使用資料庫事務隔離級別的成本消耗太大,一般在應用層做事務控制,比如使用樂觀鎖、分布式事務,來消除在資料庫層使用事務的壓力。
mysql隔離級別 MySQL 事務隔離級別
mysql innodb所提供的事務滿足acid的要求,事務是通過事務日誌中的redo log和undo log來實現原子性 undo log 一致性 undo log 永續性 redo log 事務通過鎖機制實現隔離性。1 事務隔離級別與實現read uncommitted 讀未提交 read c...
mysql事務隔離級別詳解 事務的隔離級別詳解
事務的隔離級別 在資料庫操作中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別。問題的提出 資料庫是要被廣大客戶所共享訪問的,那麼在資料庫操作過程中很可能出現以下幾種不確定情況。更新丟失 兩個事務都同時更新一行資料,乙個事務對資料的更新把另乙個事務對資料的更新覆蓋了。這是因為系統沒有執行任何的...
MySQL事務隔離級別
sql標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低階別的隔離級一般支援更高的 併發處理,並擁有更低的系統開銷。read uncommitted 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,...