mysql read commited 和 REPEATABLE read 原因

來源:互聯網
上載者:User

標籤:mysql隔離等級

read commited 和 REPEATABLE read  

關於一致性讀的問題。 參考 mysql 技術內幕--innodb 儲存引擎

session 1

mysql> begin;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from t2;

+------+

| id   |

+------+

|    1 |

+------+

1 row in set (0.00 sec)

同時到session2:

mysql> 

mysql> 

mysql> begin;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from t2;

+------+

| id   |

+------+

|    1 |

+------+

1 row in set (0.00 sec)

mysql> update t2 set id=2;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1  Warnings: 0

mysql> 

mysql> select * from t2;

+------+

| id   |

+------+

|    2 |

+------+

1 row in set (0.00 sec)

mysql> commit;

Query OK, 0 rows affected (0.01 sec)

再回到session1:

如果是

mysql>  select @@tx_isolation;

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

| @@tx_isolation |

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

| READ-COMMITTED |

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

1 row in set (0.00 sec)

mysql> select * from t2;

+------+

| id   |

+------+

|    2 |

+------+

1 row in set (0.00 sec)

在session1 的同一個事物中,兩次查詢t2,會看到不通的結果,

如果是:

mysql> select @@tx_isolation;

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

| @@tx_isolation  |

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

| REPEATABLE-READ |

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

1 row in set (0.00 sec)

在session 1 中,看到

mysql> begin;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from t2;

+------+

| id   |

+------+

|    2 |

+------+

1 row in set (0.00 sec)

mysql> select * from t2;

+------+

| id   |

+------+

|    2 |

+------+

1 row in set (0.00 sec)

是同一個結果。 

這是由於mysql的一致性非鎖定讀 造成的。

如果讀取的行正在備其他事物執行update或delete操作,這時讀取操作不會因此去等待行上鎖

的釋放,innodb回去讀一個快照資料。因為不需要等待訪問的行上x鎖的釋放,所以稱之為非鎖定讀。

快照資料是指該行 的之前版本的資料(可能有多個版本)。是通過undo斷來實現的,undo是用

來在事物中復原資料,因此快照資料沒有額外開銷。

在REPEATABLE read  下,快照讀總是讀取事物開始時的行版本資料;而在read commited下,

是讀取最新一份快照,所以一個查詢會看到不通的結果。


mysql read commited 和 REPEATABLE read 原因

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.