Mysql事務隔離級別之讀提交

2021-09-12 22:28:50 字數 2708 閱讀 1413

檢視mysql 事務隔離級別
mysql> show variables like '%isolation%';

+---------------+----------------+

| variable_name | value |

+---------------+----------------+

| tx_isolation | read-committed |

+---------------+----------------+

1 row in set (0.00 sec)

可以看到當前的事務隔離級別為read-committed讀提交

下面看看當前隔離級別下的事務隔離詳情,開啟兩個查詢終端a、b。

下面有乙個order表,初始資料如下

mysql> select * from `order`;

+----+--------+

| id | number |

+----+--------+

| 13 | 1 |

+----+--------+

1 row in set (0.00 sec)

第一步,在a,b中都開啟事務
mysql> start transaction;

query ok, 0 rows affected (0.00 sec)

第二步查詢兩個終端中的number
mysql> select * from `order`;

+----+--------+

| id | number |

+----+--------+

| 13 | 1 |

+----+--------+

1 row in set (0.00 sec)

mysql> select * from `order`;

+----+--------+

| id | number |

+----+--------+

| 13 | 1 |

+----+--------+

1 row in set (0.00 sec)

第三步將b中的number修改為2,但不提交事務
mysql> update `order` set number=2;

query ok, 1 row affected (0.00 sec)

rows matched: 1 changed: 1 warnings: 0

第四步查詢a中的值
mysql> select * from `order`;

+----+--------+

| id | number |

+----+--------+

| 13 | 1 |

+----+--------+

1 row in set (0.00 sec)

發現a中的值並沒有修改。
第五步,提交事務b,再次查詢a中的值
mysql> commit;

query ok, 0 rows affected (0.01 sec)

mysql> select * from `order`;

+----+--------+

| id | number |

+----+--------+

| 13 | 2 |

+----+--------+

1 row in set (0.00 sec)

發現a中的值已經更改
第六步,提交a中的事務,再次查詢a,b的值。
mysql> commit;

query ok, 0 rows affected (0.00 sec)

mysql> select * from `order`;

+----+--------+

| id | number |

+----+--------+

| 13 | 2 |

+----+--------+

1 row in set (0.00 sec)

mysql> select * from `order`;

+----+--------+

| id | number |

+----+--------+

| 13 | 2 |

+----+--------+

1 row in set (0.00 sec)

發現a,b中的值都更改為2了。
下面給乙個簡單的示意圖

我們可以看到,在事務隔離級別為讀已提交的情況下,當b中事務提交了之後,即使a未提交也可以讀到b事務提交的結果。這樣解決了髒讀的問題。

mysql事務隔離級別及幻讀

一 事務的基本特性 acid 1.原子性 atomicity 事務中的所有操作要麼全部生效,要麼全部不生效。事務如果執行過程中報錯,會將所有的操作回滾。也就是事務中的所有操作是乙個整體,就像化學中學過的院子,是構成物質的基本單位。2.一致性 consistency 事務開始前和事務結束後,資料處於一...

mysql隔離級別 MySQL 事務隔離級別

mysql innodb所提供的事務滿足acid的要求,事務是通過事務日誌中的redo log和undo log來實現原子性 undo log 一致性 undo log 永續性 redo log 事務通過鎖機制實現隔離性。1 事務隔離級別與實現read uncommitted 讀未提交 read c...

mysql事務隔離級別幻讀的解釋

不可重複度和幻讀區別 不可重複讀的重點是修改,幻讀的重點在於新增或者刪除。例1 同樣的條件,你讀取過的資料,再次讀取出來發現值不一樣了 事務1中的a先生讀取自己的工資為 1000的操作還沒完成,事務2中的b先生就修改了a的工資為2000,導 致a再讀自己的工資時工資變為 2000 這就是不可重複讀。...