MySql的事務隔離級別

2021-09-02 16:40:18 字數 1040 閱讀 8642

前言

資料庫都是有事務的,事務的不同級別,對應資料操作的不同級別安全性。本文以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 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,...