在碼農的世界裡,優美的應用體驗,來源于程式員對細節的處理以及自我要求的境界,年輕人也是忙忙碌碌的碼農中一員,每天、每周,都會留下一些腳印,就是這些創作的内容,有一種執着,就是不知為什麼,如果你迷茫,不妨來瞅瞅碼農的軌迹。
優美的音樂節奏帶你浏覽這個效果的編碼過程
堅持每一天,是每個有理想青年的追求
追尋年輕人的腳步,也許你的答案就在這裡
如果你迷茫 不妨來瞅瞅這裡
事務就是要保證一組資料庫操作,要麼全部成功,要麼全部失敗。
在 MySQL 中,事務支援是在引擎層實作的,MySQL 原生的 MyISAM 引擎就不支援事務,是以就有了 InnoDB 引擎。
當資料庫上有多個事務同時執行的時候,就可能出現髒讀(dirty read)、不可重複讀 (non-repeatable read)、幻讀(phantom read)的問題,為了解決這些問題,就有 了“隔離級别”的概念。
髒讀指的是讀到了其他事務未送出的資料,未送出意味着這些資料可能會復原,也就是可能最終不會存到資料庫中,也就是不存在的資料。讀到了并一定最終存在的資料,這就是髒讀。
不可重複讀指的是在同一事務内,不同的時刻讀到的同一批資料可能是不一樣的,可能會受到其他事務的影響,比如其他事務改了這批資料并送出了
假設事務A對某些行的内容作了更改,但是還未送出,此時事務B插入了與事務A更改前的記錄相同的記錄行,并且在事務A送出之前先送出了,而這時,在事務A中查詢,會發現好像剛剛的更改對于某些資料未起作用,但其實是事務B剛插入進來的,讓使用者感覺很魔幻,感覺出現了幻覺,這就叫幻讀
為了解決這些問題,就有 了“隔離級别”的概念
隔離就是将事務操作隔離,互相之間不影響,隔離得越嚴實,效率就會越低,是以在業務開發中,需要在二者之間尋找一個平衡點,
SQL 标準的事務隔離級别包括:
讀未送出(read uncommitted)
讀送出(read committed)
可重複讀(repeatable read)
串行化 (serializable )。
MySQL 的 InnoDB 引擎支援事務,其中可重複讀是預設的隔離級别。
如這裡我們有一張表
然後這裡有一條使用者資料

現在我們來修改這個使用者的年齡來說明一下不同的事務隔離(修改使用者的年齡為22)。
如下圖所示,若隔離級别是“讀未送出”, 則 V1 的值就是 22。這時候事務 B 雖然還沒有送出,但是 結果已經被 A 看到了。是以,V2、V3 也都是 22。
若隔離級别是“讀送出”,則 V1 是 20,事務 B 的更新在送出後才能被 A 看到。是以,V2 、V3 的值是 22。
若隔離級别是“可重複讀”,則 V1、V2 是 20,V3 是 22。之是以 V2 還是 20,遵循的就是這個要求:事務在執行期間看到的資料前後必須是一緻的。
若隔離級别是“串行化”,則在事務 B 執行“将 20 改成 22”的時候,會被鎖住。直到事務 A 送出後,事務 B 才可以繼續執行。是以從 A 的角度看, V1、V2 值是 20,V3 的值 是 22。
在 MySQL 中,實際上每條記錄在更新的時候都會同時記錄一條復原操作,記錄上的最新值,通過復原操作,都可以得到前一個狀态的值。
如在可重複讀隔離模式下,假設将一個值從 1 被按順序改成了 2、3、4,在復原日志裡面就會有類似下面的記錄。
完畢
不局限于思維,不局限語言限制,才是程式設計的最高境界。
以小編的性格,肯定是要錄制一套視訊的,随後會上傳
有興趣 你可以關注一下 西瓜視訊 — 早起的年輕人