日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

全面解析MySQL中的隔離級別

瀏覽:13日期:2023-10-06 15:08:48

數據庫并發的對同一批數據進行增刪改,就可能會出現我們所說的臟寫、臟讀、不可重復讀、幻讀等一系列問題。MySQL提供了一系列機制來解決事務并發問題,比如事務隔離、鎖機制、MVCC多版本并發控制機制。今天來探究一下事務隔離機制。

事務是一組SQL組成的邏輯處理單元,先來看下事務的ACID特性: 原子性(Atomicity) :事務是一個原子操作單元,對數據進行修改,要么全執行要么全不執行。是從執行層面上來描述的。 一致性(Consistent) :在事務開始和完成時,數據都必須保持一致狀態。是從執行結果層面上來描述的。 隔離性(Isolation) :數據庫系統提供一定的隔離機制,保證事務執行過程中對外部不可見,獨立運行,不受外部影響。 持久性(Durable) :事務完成之后,它對于數據的修改是永久性的,即使出現系統故障也能夠保持。 并發事務的影響: 臟寫(更新丟失:Lost Update):多個事務選擇了同一行,彼此不知道對方存在,會覆蓋之前事務的數據操作。 臟讀(Dirty Reads):A事務讀取了B事務未提交的數據,B事務回滾,A提交,最終結果不符合一致性原則 不可重讀(Non-Repeatable Reads):同一個事務,相同的查詢語句,執行多次結果不一致,可能是外部事務修改導致的,不符合隔離性。 幻讀(Phantom Reads):事務A讀取到了事務B提交的新增數據,不符合隔離性 事務隔離級別:

隔離級別  臟讀(Dirty Read) 不可重復讀(NonRepeatable Read) 幻讀(Phantom Read) 讀未提交(Read uncommitted) 可能 可能 可能 讀已提交(Read committed) 不可能 可能 可能 可重復讀(Repeatable Read) 不可能 不可能 可能 串行化(Serializable) 不可能 不可能 不可能

MySQL提供了上面四種隔離級別,隔離越嚴格,可能出現的問題就越少,但付出的性能代價就越大,默認的隔離級別是可重復讀。下面使用客戶端進行操作進行驗證。

先加創建一張表和數據

CREATE TABLE `account` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `balance` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;INSERT INTO `account` (`id`, `balance`)VALUES (1, 500), (2, 600), (3, 200);

連接客戶端,查看隔離級別,可以看到是可重復讀:

MySQL [test]> show variables like ’tx_isolation’;+---------------+-----------------+| Variable_name | Value |+---------------+-----------------+| tx_isolation | REPEATABLE-READ |+---------------+-----------------+讀未提交測試:

AB客戶端都執行set tx_isolation=’read-uncommitted’;設置隔離級別為讀未提交。

A客戶端開啟事務:start transaction;查詢數據:select * from account;

B客戶端開啟事務:start transaction;更新數據:update account set balance = balance - 100 where id = 1;此時事務未提交

A客戶端再次查詢數據:select * from account; 此時看到兩次查詢的數據已經不一樣了

全面解析MySQL中的隔離級別

全面解析MySQL中的隔離級別

在B沒提交前A就讀到了B更新的數據,此時如果B回滾,那么A那邊就是臟數據。這種情況就是讀未提交造成的臟讀。用讀已提交隔離級別可以解決。

使用commit命令把AB客戶端的事務提交。

讀已提交測試:

AB客戶端都執行 set tx_isolation=’read-committed’; 設置隔離級別為讀已提交。

A客戶端開啟事務:start transaction;查詢數據:select * from account;

B客戶端開啟事務:start transaction;更新數據:update account set balance = balance - 100 where id = 1;此時事務未提交

A客戶端再次查詢數據:select * from account; 此時看到A客戶端兩次查詢數據一致,未出現臟讀情況

此時B客戶端事務提交:commit;

A客戶端再次查詢數據:select * from account; 此時看到A客戶端查詢數據已經發生了變化,這就是不可重復讀。

全面解析MySQL中的隔離級別

全面解析MySQL中的隔離級別

可重復讀測試:

AB客戶端都執行 set tx_isolation=’repeatable-read’; 設置隔離級別為可重復讀。

A客戶端開啟事務:start transaction;查詢數據:select * from account;

B客戶端開啟事務:start transaction;更新數據:update account set balance = balance - 100 where id = 1; commit提交事務

A客戶端再次查詢數據:select * from account; 此時看到A客戶端兩次查詢數據一致,重復讀取數據一致。

A客戶端執行更新語句:update account set balance = balance - 50 where id = 1;

A客戶端再次查詢數據:select * from account; 此時看到id=1的這條數據是B客戶端更新之后的數據-50,數據的一致性沒有被破壞

B客戶端重新開啟事務,插入一條數據:insert into account(id,balance) values (4,1000); commit提交事務;

A客戶端查詢,和上次結果一致

A客戶端執行:update account set balance = balance - 100 where id = 4; 更新B客戶端新插入的數據,能執行成功,再次查詢所有數據,能插到id=4的數據,出現幻讀。

# A客戶端執行過程:# 設置隔離級別可重復度MySQL [test]> set tx_isolation=’repeatable-read’;Query OK, 0 rows affected, 1 warning (0.00 sec)# 開啟事務MySQL [test]> start transaction;Query OK, 0 rows affected (0.00 sec)# 查詢所有數據MySQL [test]> select * from account;+----+---------+| id | balance |+----+---------+| 1 | 300 || 2 | 600 || 3 | 200 |+----+---------+3 rows in set (0.00 sec)# 再次查詢驗證兩次結果是否一致MySQL [test]> select * from account;+----+---------+| id | balance |+----+---------+| 1 | 300 || 2 | 600 || 3 | 200 |+----+---------+3 rows in set (0.00 sec)# 在B客戶端插入數據之后,此次A客戶端不能查詢到MySQL [test]> select * from account;+----+---------+| id | balance |+----+---------+| 1 | 150 || 2 | 600 || 3 | 200 |+----+---------+3 rows in set (0.00 sec)# A客戶端更新B客戶端插入的數據,發現可以更新成功MySQL [test]> update account set balance = balance + 1000 where id = 4;Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0# 再次查詢,能查詢到數據,出現幻讀MySQL [test]> select * from account;+----+---------+| id | balance |+----+---------+| 1 | 400 || 2 | 600 || 3 | 200 || 4 | 2000 |+----+---------+4 rows in set (0.00 sec)# 提交事務MySQL [test]> commit;Query OK, 0 rows affected (0.01 sec)

# B客戶端執行過程:設置隔離級別可重復讀MySQL [test]> set tx_isolation=’repeatable-read’;Query OK, 0 rows affected, 1 warning (0.00 sec)# 開啟事務MySQL [test]> start transaction;Query OK, 0 rows affected (0.00 sec)# 更新數據,直接提交MySQL [test]> update account set balance = balance - 100 where id = 1;Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0MySQL [test]> commit;Query OK, 0 rows affected (0.01 sec)# 再次開啟事務MySQL [test]> start transaction;Query OK, 0 rows affected (0.00 sec)# 插入一條數據MySQL [test]> insert into account(id,balance) values (4,1000);Query OK, 1 row affected (0.01 sec)MySQL [test]> commit;Query OK, 0 rows affected (0.00 sec)

最后一種串行化:set tx_isolation=’serializable’;可自行驗證,能解決上面所有問題,但是一般不會用到的,保證一致性的同時帶來的是性能大幅度下降,并發性極低,默認是可重復讀。

通過隔離級別在一定程度上能處理事務并發的問題,除此之外還有其他的手段,后續會再次探究。

以上就是全面解析MySQL中的隔離級別的詳細內容,更多關于MySQL 隔離級別的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美国产偷国产精品三区| 精品丝袜在线| 国产亚洲精品久久久久婷婷瑜伽| 久草精品视频| 久久国产电影| 亚洲精品无播放器在线播放| 久久不射网站| 欧美国产先锋| 久久久91麻豆精品国产一区| 三级精品视频| 激情丁香综合| 亚洲欧美视频一区二区三区| 日韩精品一二三区| 亚洲乱码一区| 欧美日韩亚洲国产精品| 国产精品三级| 久久久久久婷| 欧美~级网站不卡| 欧美天堂视频| 91精品亚洲| 视频一区视频二区中文| 午夜电影一区| 国产精品久久久久久久久久妞妞 | 国产精品玖玖玖在线资源| 国产劲爆久久| 免费污视频在线一区| 欧美一区二区三区激情视频| 午夜在线播放视频欧美| 久久精品99久久久| 在线天堂中文资源最新版| 91成人精品| 欧美日韩网址| 久久中文字幕导航| 久久三级视频| 免费高清在线一区| 免费观看亚洲天堂| 欧美一区二区三区高清视频| 亚洲精品四区| 国产在线观看www| 欧美中文日韩| 欧美aa在线视频| 国产精品7m凸凹视频分类| 日韩激情综合| 99精品电影| 久久精品av麻豆的观看方式| 91精品一区二区三区综合| 日本一不卡视频| 91免费精品国偷自产在线在线| 黑森林国产精品av| 男女精品网站| 久久精品国产999大香线蕉| 欧美色图国产精品| 国产日韩欧美一区| 欧美aa国产视频| 免费精品国产| 国产精品久久久久77777丨| 久久a爱视频| 日本色综合中文字幕| 国产一区二区三区久久| 视频一区二区三区入口| 日韩av自拍| 久久久精品久久久久久96| 成人在线免费观看网站| 日韩福利视频导航| 免费av一区| 偷拍欧美精品| 99国产精品99久久久久久粉嫩| 西西人体一区二区| 深夜福利一区| 精品一区二区三区在线观看视频 | 免费成人网www| 日韩黄色在线观看| 91日韩免费| 婷婷精品在线| 亚洲一级二级| 国产 日韩 欧美 综合 一区 | 日韩不卡一区二区三区| 国产精品99免费看| 麻豆中文一区二区| 免费日本视频一区| 99久久久久久中文字幕一区| 精品一区二区三区中文字幕在线| 天堂精品久久久久| 在线精品小视频| 国产精品国产一区| 日韩精品中文字幕一区二区| 国产综合亚洲精品一区二| 国产一区二区三区探花| 国产欧美日韩视频在线| 日韩在线电影| 免费精品视频在线| 久久精品一本| 国产精品色网| 日韩精品首页| 精品三区视频| 国产精品欧美在线观看| 日韩在线电影| 香蕉久久久久久久av网站| 999久久久精品国产| 色欧美自拍视频| 国产免费av一区二区三区| 日韩天堂av| 99精品网站| 四虎4545www国产精品| 国产videos久久| 欧美交a欧美精品喷水| 精品国产精品国产偷麻豆| 亚洲一区av| 黄色成人在线网址| 欧美在线日韩| 鲁大师成人一区二区三区| www.com.cn成人| 国产剧情一区二区在线观看| 亚洲一二av| 免费视频国产一区| 国产欧美另类| 97精品国产一区二区三区| 日韩av字幕| 日韩国产欧美一区二区三区| 五月国产精品| 日韩精品成人在线观看| 日产欧产美韩系列久久99| 石原莉奈在线亚洲三区| 一区二区三区午夜视频| 亚洲一级大片| 日韩动漫一区| 国产精品三p一区二区| 欧美激情91| 麻豆视频在线观看免费网站黄| 久久久久久色 | 亚洲精品乱码久久久久久蜜桃麻豆 | 久久福利毛片| 天堂网在线观看国产精品| 在线日韩视频| 国产麻豆综合| 日本亚洲视频在线| 久久国产婷婷国产香蕉| 国产精品三p一区二区| 久久久久亚洲精品中文字幕| 成人在线免费观看91| 精品国产第一福利网站| 欧美精品一区二区久久| 综合一区av| 成人av三级| 久久一级电影| 日韩 欧美一区二区三区| 国产一区二区三区网| 蜜桃一区二区三区| 国产精品免费看| 国产精品久久久亚洲一区| 蜜桃av一区| 日韩亚洲国产欧美| 亚洲日本久久| 国产欧美日韩在线观看视频| 免费在线亚洲| 日韩中文首页| 午夜亚洲福利在线老司机| 日韩精品社区| 精品国产三区在线| 在线一区av| 欧美日韩精品一本二本三本 | 日韩精品亚洲专区| 久久精品网址| 亚洲免费成人| 18国产精品| 日韩伦理一区| 视频在线在亚洲| 欧美激情aⅴ一区二区三区| 日韩大片在线观看| 视频精品一区二区| 美女久久久精品| 国产v综合v| 亚洲综合中文| 国产一区三区在线播放| 欧美日韩免费观看一区=区三区| 日韩毛片网站| 欧美亚洲日本精品| 日韩精品一级二级| 欧美激情日韩| 99视频一区| 久久99影视| 丝袜诱惑制服诱惑色一区在线观看| 国产精品自在| 99riav1国产精品视频| 国产精品久久久久久久久久白浆| 欧美成人综合| 97久久亚洲| 国产99精品| 国产精品亚洲欧美| 国产亚洲欧美日韩在线观看一区二区| 久久久影院免费| 亚洲一区二区免费看| 久久久久伊人| 97精品久久| 精品精品国产三级a∨在线| 日韩av资源网| 日韩激情网站| 成人国产综合| 999视频精品| 国产精品观看|