php mysql隔離 MySQL事務隔離級別

2021-10-22 10:53:19 字數 2236 閱讀 2949

事務併發導致的問題是資料庫需要重點解決的問題,關於事務處理的技術都已經非常成熟了,四種隔離級別再加上乙個快照是所有資料庫

mysql> commit

query ok, 0 rows affected (0.04 sec)

mysql> select * from innodb where;

| name | age |

| fzj | 25 |

1 row in set (0.00 sec)

即便是a事務提交了,b事務查詢的結果仍然不受干擾,這是可重複讀隔離級別的典型特性。可是如果 b事務也要更新同一條記錄怎麼辦?基於這個數字會導致a事務更新的丟失。

mysql> update innodb set age=age+5 where;

query ok, 1 row affected (0.00 sec)

rows matched: 1 changed: 1 warnings: 0

mysql> select * from innodb where;

| name | age |

| fzj | 35 |

1 row in set (0.00 sec)

可見a事務的更新並沒有丟失。如果在a事務未提交之前,b事務更新同一條記錄會導致b事務被阻塞,update需要對相應行加上行鎖,這種排他 鎖是獨占性的。

2>解決幻讀問題

mysql> start transaction;

query ok, 0 rows affected (0.00 sec)

mysql> insert into innodb values('ecy', 25);

query ok, 1 row affected (0.00 sec)

mysql> start transaction;

query ok, 0 rows affected (0.04 sec)

mysql> select count(*) from innodb;

| count(*) |

| 1 |

1 row in set (0.02 sec)

mysql> commit

query ok, 0 rows affected (0.05 sec)

mysql> select count(*) from innodb;

| count(*) |

| 1 |

1 row in set (0.00 sec)

可見a事務成功地插入了一條記錄,因為 它沒有同b事務競爭鎖,所以a事務插入記錄和b事務更新記錄可以同時進行,可是a事務提交之後並沒有導致b事務幻讀,mysql的可重複讀隔離級別確實能 避免幻讀。

3>serializable隔離級別

serializable隔離級別是最高的隔離級別,乙個事務中的查詢語句會給相應的行加上排他鎖,直到事務結束。

mysql> set session transaction isolation level serializable;

query ok, 0 rows affected (0.00 sec)

mysql> start transaction;

query ok, 0 rows affected (0.00 sec)

mysql> update innodb set age=age+6 where;

query ok, 1 row affected (0.00 sec)

rows matched: 1 changed: 1 warnings: 0

mysql> set session transaction isolation level serializable;

query ok, 0 rows affected (0.00 sec)

mysql> start transaction;

query ok, 0 rows affected (0.00 sec)

mysql> select * from innodb where;

b事務此時會被阻塞,因為a事務要跟新'fzj'這一行,因此給這行加上了排它鎖,b事務再將給 其加上共享鎖將會失敗。使用a事務commit之後,b事務才會往下執行(我發現讓我吃驚的行為,在b事務中即使查詢name='ecy'這行,b事務也 會被阻塞,難道使用了表鎖定??)。比較repeatable-read隔離級別可以發現,在可重複讀隔離級別不會給查詢語句加上共享鎖,,如果需要的話可 以顯示地使用select ... lock in share mode和select ... for update分別加上共享鎖和排他鎖。

mysql強隔離公升級 MySQL 隔離級別

一 事務特性 1.原子性 事務是乙個原子操作單元,事務中包含的所有操作要麼都做,要麼都不做,沒有第三種情況。2.一致性 事務操作前和操作後都必須滿足業務規則約束,比如說a向b轉賬,轉賬前和轉賬後ab兩個賬戶的總金額必須是一致的。3.隔離性 隔離性是資料庫允許多個併發事務同時對資料進行讀寫的能力,隔離...

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

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

mysql隔離級別驗證 mysql 隔離級別測試

1 設定隔離級別,包括 全域性 global.tx isolation,會話級別 session.tx isolation mysql workbench的會話 2 建立測試表 注意 unsigned auto increment primary key用法 預設引擎的設定 建立測試表 use te...