【MySQL】事務(wù)隔離級(jí)別-小學(xué)

事務(wù)的基本要素

  • 原子性(Atomicity):事務(wù)開(kāi)始后所有操作逝段,要么全部做完,要么全部不做议街,不可能停滯在中間環(huán)節(jié)泽谨。事務(wù)執(zhí)行過(guò)程中出錯(cuò),會(huì)回滾到事務(wù)開(kāi)始前的狀態(tài),所有的操作就像沒(méi)有發(fā)生一樣隔盛。也就是說(shuō)事務(wù)是一個(gè)不可分割的整體,就像化學(xué)中學(xué)過(guò)的原子拾稳,是物質(zhì)構(gòu)成的基本單位吮炕。
  • 一致性(Consistency):事務(wù)開(kāi)始前和結(jié)束后,數(shù)據(jù)庫(kù)的完整性約束沒(méi)有被破壞 访得。比如A向B轉(zhuǎn)賬龙亲,不可能A扣了錢,B卻沒(méi)收到悍抑。
  • 隔離性(Isolation):同一時(shí)間鳄炉,只允許一個(gè)事務(wù)請(qǐng)求同一數(shù)據(jù),不同的事務(wù)之間彼此沒(méi)有任何干擾搜骡。比如A正在從一張銀行卡中取錢拂盯,在A取錢的過(guò)程結(jié)束前,B不能向這張卡轉(zhuǎn)賬记靡。
  • 持久性(Durability):事務(wù)完成后谈竿,事務(wù)對(duì)數(shù)據(jù)庫(kù)的所有更新將被保存到數(shù)據(jù)庫(kù),不能回滾摸吠。

MySQL的支持

MySQL只在InnoDB中支持事務(wù)

四種隔離級(jí)別

  • 未提交讀(uncommitted read)
  • 提交后讀(committed read)
  • 可重復(fù)讀(repeatable read)
  • 串行化(serializable read)

隔離說(shuō)明

隔離級(jí)別 臟讀 不可重復(fù)度 幻讀
讀未提交(read-uncommitted)
讀已提交(read-committed)
可重復(fù)讀(repeatable-read)
可串行化(serializable)
  • 臟讀(duty read):讀到?jīng)]有提交的事務(wù)提交的數(shù)據(jù)
  • 不可重復(fù)讀(unrepeatable read):在一個(gè)事務(wù)內(nèi)空凸,讀到的同一條數(shù)據(jù)可能不一樣
  • 幻讀(dream read):事務(wù)A 按照一定條件進(jìn)行數(shù)據(jù)讀取, 期間事務(wù)B 插入了相同搜索條件的新數(shù)據(jù)寸痢,事務(wù)A再次按照原先條件進(jìn)行讀取時(shí)呀洲,發(fā)現(xiàn)了事務(wù)B 新插入的數(shù)據(jù) 稱為幻讀

實(shí)驗(yàn)

環(huán)境:Win7+MySQL5.7

mysql> desc test;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(255) | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.09 sec)
mysql> SELECT * FROM test;
+----+-------------------+
| id | name              |
+----+-------------------+
|  1 | asdasd123123adasd |
+----+-------------------+
1 row in set (0.00 sec)

讀未提交

事務(wù)A

Query OK, 0 rows affected (0.00 sec)
mysql> select * from test where id =1;
+----+-------------------+
| id | name              |
+----+-------------------+
|  1 | asdasd123123adasd |
+----+-------------------+
1 row in set (0.00 sec)

事務(wù)B

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> update test set name="test_b" where id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

事務(wù)A

mysql> select * from test where id = 1;
+----+--------+
| id | name   |
+----+--------+
|  1 | test_b |
+----+--------+
1 row in set (0.00 sec)

結(jié)論

  • 事務(wù)A在事務(wù)中兩次查詢數(shù)據(jù)不一樣
  • 事務(wù)B還未提交,事務(wù)A的結(jié)果已經(jīng)變化
  • 未提交讀是臟讀

讀后提交

事務(wù)A

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from test where id = 1;
+----+-------------------+
| id | name              |
+----+-------------------+
|  1 | asdasd123123adasd |
+----+-------------------+
1 row in set (0.00 sec)

事務(wù)B

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> update test set name="test_b" where id = 1;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

事務(wù)A

mysql> select * from test where id = 1;
+----+-------------------+
| id | name              |
+----+-------------------+
|  1 | asdasd123123adasd |
+----+-------------------+
1 row in set (0.00 sec)

事務(wù)B

mysql> commit;
Query OK, 0 rows affected (0.07 sec)

事務(wù)A

mysql> select * from test where id = 1;
+----+--------+
| id | name   |
+----+--------+
|  1 | test_b |
+----+--------+
1 row in set (0.00 sec)

結(jié)論

  • 事務(wù)A在事務(wù)B執(zhí)行更新語(yǔ)句后查詢結(jié)果一致
  • 事務(wù)A在事務(wù)B提交后查詢結(jié)果改變
  • 提交后讀是不可重復(fù)讀的

可重復(fù)讀

事務(wù)A

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from test where id = 1;
+----+--------+
| id | name   |
+----+--------+
|  1 | test_a |
+----+--------+
1 row in set (0.00 sec)

事務(wù)B

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> update test set name="test_b" where id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

事務(wù)A

mysql> select * from test where id = 1;
+----+--------+
| id | name   |
+----+--------+
|  1 | test_a |
+----+--------+
1 row in set (0.00 sec)

事務(wù)B

mysql> commit;
Query OK, 0 rows affected (0.06 sec)

事務(wù)A

mysql> select * from test where id = 1;
+----+--------+
| id | name   |
+----+--------+
|  1 | test_a |
+----+--------+
1 row in set (0.00 sec)

結(jié)論

  • 事務(wù)A中的查詢結(jié)果在事務(wù)B提交前后都不會(huì)變化
  • 可重復(fù)讀-可重復(fù)讀

幻讀問(wèn)題


image.png

上圖能出現(xiàn)幻讀

總結(jié)

隔離級(jí)別中沒(méi)有試驗(yàn)系列化啼止,個(gè)人覺(jué)著意義不大道逗,上述試驗(yàn)?zāi)苷f(shuō)明,隔離級(jí)別已經(jīng)能深刻的說(shuō)明問(wèn)題献烦,加油

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末憔辫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子仿荆,更是在濱河造成了極大的恐慌贰您,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拢操,死亡現(xiàn)場(chǎng)離奇詭異锦亦,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)令境,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門杠园,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人舔庶,你說(shuō)我怎么就攤上這事抛蚁〕滦眩” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵瞧甩,是天一觀的道長(zhǎng)钉跷。 經(jīng)常有香客問(wèn)我,道長(zhǎng)肚逸,這世上最難降的妖魔是什么爷辙? 我笑而不...
    開(kāi)封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮朦促,結(jié)果婚禮上膝晾,老公的妹妹穿的比我還像新娘。我一直安慰自己务冕,他們只是感情好血当,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著禀忆,像睡著了一般歹颓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上油湖,一...
    開(kāi)封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天巍扛,我揣著相機(jī)與錄音,去河邊找鬼乏德。 笑死撤奸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的喊括。 我是一名探鬼主播胧瓜,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼郑什!你這毒婦竟也來(lái)了府喳?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蘑拯,失蹤者是張志新(化名)和其女友劉穎钝满,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體申窘,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弯蚜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了剃法。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碎捺。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出收厨,到底是詐尸還是另有隱情晋柱,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布诵叁,位于F島的核電站雁竞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏黎休。R本人自食惡果不足惜浓领,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一玉凯、第九天 我趴在偏房一處隱蔽的房頂上張望势腮。 院中可真熱鬧,春花似錦漫仆、人聲如沸捎拯。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)署照。三九已至,卻和暖如春吗浩,著一層夾襖步出監(jiān)牢的瞬間建芙,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工懂扼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留禁荸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓阀湿,卻偏偏與公主長(zhǎng)得像赶熟,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子陷嘴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353