<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
MySQL 事務隔離級別是為了解決並行事務互相干擾的問題的,MySQL 事務隔離級別總共有以下 4 種:
讀未提交,也叫未提交讀,該隔離級別的事務可以看到其他事務中未提交的資料。該隔離級別因為可以讀取到其他事務中未提交的資料,而未提交的資料可能會發生回滾,因此我們把該級別讀取到的資料稱之為髒資料,把這個問題稱之為髒讀。
讀已提交,也叫提交讀,該隔離級別的事務能讀取到已經提交事務的資料,因此它不會有髒讀問題。但由於在事務的執行中可以讀取到其他事務提交的結果,所以在不同時間的相同 SQL 查詢中,可能會得到不同的結果,這種現象叫做不可重複讀。
可重複讀,MySQL 預設的事務隔離級別。可重複讀可以解決“不可重複讀”的問題,但還存在幻讀的問題。所謂的幻讀指的是,在同一事務的不同時間使用相同 SQL 查詢時,會產生不同的結果。例如,一個 SELECT 被執行了兩次,但是第二次返回了第一次沒有返回的一行,那麼這一行就是一個“幻像”行。
注意:幻讀和不可重複讀的側重點是不同的,不可重複讀側重於資料修改,兩次讀取到的同一行資料不一樣;而幻讀側重於新增或刪除,兩次查詢返回的資料行數不同。
序列化,事務最高隔離級別,它會強制事務排序,使之不會發生衝突,從而解決了髒讀、不可重複讀和幻讀問題,但因為執行效率低,所以真正使用的場景並不多。
簡單總結一下,MySQL 中的事務隔離級別就是為了解決髒讀、不可重複讀和幻讀等問題的,這 4 種隔離級別與這 3 個問題之間的對應關係如下:
事務隔離級別 | 髒讀 | 不可重複讀 | 幻讀 |
---|---|---|---|
讀未提交(READ UNCOMMITTED) | √ | √ | √ |
讀已提交(READ COMMITTED) | × | √ | √ |
可重複讀(REPEATABLE READ) | × | × | √ |
序列化(SERIALIZABLE) | × | × | × |
並行事務中存在以下 3 個問題。
一個事務讀取到了另一個事務為提交儲存的資料,之後此事務進行了回滾操作,從而導致第一個事務讀取了一個不存在的髒資料。
在同一個事務中,同一個查詢在不同的時間得到了不同的結果。例如事務在 T1 讀取到了某一行資料,在 T2 時間重新讀取這一行時候,這一行的資料已經發生修改,所以再次讀取時得到了一個和 T1 查詢時不同的結果。
MySQL 對幻讀的定義如下:
The so-called phantom problem occurs within a transaction when the same query produces different sets of rows at different times. For example, if a SELECT is executed twice, but returns a row the second time that was not returned the first time, the row is a “phantom” row.
官方檔案:翻譯為中文是:同一個查詢在不同時間得到了不同的結果,這就是事務中的幻讀問題。例如,一個 SELECT 被執行了兩次,但是第二次返回了第一次沒有返回的一行,那麼這一行就是一個“幻像”行。
檢視全域性 MySQL 事務隔離級別和當前對談的事務隔離級別的 SQL 如下:
select @@global.tx_isolation,@@tx_isolation;
以上 SQL 執行結果如下圖所示:
每個連線到 MySQL 的使用者端可以單獨設定事務的隔離級別,MySQL 可以使用以下 SQL 設定當前連線(使用者端)的事務隔離級別:
set session transaction isolation level 事務隔離級別;
其中事務隔離級別有 4 個值:
一個事務讀取到了另一個事務為提交儲存的資料,之後此事務進行了回滾操作,從而導致第一個事務讀取了一個不存在的髒資料。接下來,我們使用 SQL 來演示一下髒讀問題。
正式開始之前,先建立一個測試表:
-- 建立一個城市表 drop table if exists city; create table city( id int primary key auto_increment, name varchar(250) not null );
髒讀的執行順序如下:
髒讀的執行 SQL 和執行順序如下:
對應的執行結果如下圖所示:
從上述結果可以看出,當把使用者端 A 設定為讀未提交的事務隔離級別後,使用者端 A 可以讀取到其他事務未提交的資料,當其他事務回滾之後,使用者端 A 讀取的資料就成了髒資料,這就是髒讀,也就是讀未提交的事務隔離級別中存在髒讀的問題。
在同一個事務中,同一個查詢在不同的時間得到了不同的結果。例如事務在 T1 讀取到了某一行資料,在 T2 時間重新讀取這一行時候,這一行的資料已經發生修改,所以再次讀取時得到了一個和 T1 查詢時不同的結果。
不可重複讀的執行順序如下:
不可重複讀的執行 SQL 和執行順序如下:
對應執行的結果如下圖所示:
從上述結果中可以看出,使用者端 A 被設定了讀已提交的事務隔離級別之後,使用同樣的 SQL 兩次讀取到的同一條資料,內容是不一樣的,這就是不可重複讀。也就是讀已提交的事務隔離級別中,可能存在不可重複讀的問題。
同一個查詢在不同時間得到了不同的結果,這就是事務中的幻讀問題。例如,一個 SELECT 被執行了兩次,但是第二次返回了第一次沒有返回的一行,那麼這一行就是一個“幻像”行。
幻讀的執行順序如下:
幻讀的執行 SQL 和執行順序如下: 使用者端 A:set session transaction isolation level repeatable read; 使用者端 A:start transaction; 使用者端 A:select * from city where id<5; --查詢出1條資料 使用者端 B:start transaction; 使用者端 B:insert into city(id,name) values(2,'北京'); 使用者端 B:commit; 使用者端 A:update city set name='京城' where id=2; 使用者端 A:select * from city where id<5; --查詢出2條資料 對應執行的結果如下圖所示:
從上述結果可以看出,使用者端 A 被設定了可重複讀的事務隔離級別之後,使用相同的 SQL 卻查詢出了一樣的結果,第一次查詢出了一條資料,而第二次查詢出了兩條資料,多出來的這行資料就叫做“幻像”行,因此我們可以得出結果,在可重複讀中可能會存在幻讀的問題。
MySQL 中有 4 種事務隔離級別:讀未提交(存在髒讀/不可重複讀/幻讀問題)、讀已提交(存在不可重複讀/幻讀問題)、可重複讀(存在幻讀問題)和序列化,其中可重複讀是 MySQL 預設的事務隔離級別。髒讀是讀到了其他事務未提交的資料,不可重複讀是讀到了其他事務修改的資料,而幻讀則是讀取到了其他事務新增或刪除的“幻像”行資料。
到此這篇關於一文了解MySQL事務隔離級別的文章就介紹到這了,更多相關 MySQL事務隔離級別內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45