?????作者名稱:DaenCode
??作者簡介:啥技術(shù)都喜歡搗鼓搗鼓,喜歡分享技術(shù)、經(jīng)驗(yàn)、生活。
??人生感悟:嘗盡人生百味,方知世間冷暖。
??所屬專欄:重溫MySQL
??前言
無論是在校招、社招,亦或者大學(xué)計(jì)算機(jī)專業(yè)、軟件工程等相關(guān)面試或者考試中,MySQL事務(wù)的相關(guān)知識都是必不可少的。本文主要為MySQL初學(xué)者快速學(xué)習(xí)MySQL事務(wù)保駕護(hù)航。
??事務(wù)的定義及作用
定義:事務(wù)是一個(gè)不可再此分割的最小工作單元。換句話說事務(wù)通常代表一個(gè)完整的業(yè)務(wù)或者業(yè)務(wù)線。通俗來說,一個(gè)業(yè)務(wù)功能所包含的操作,要么全部成功,要么全部失敗
。
作用:
- 為數(shù)據(jù)庫的操作
或者一個(gè)完整的業(yè)務(wù)功能
提供一個(gè)從失敗操作中恢復(fù)
到正常狀態(tài)的方法,同時(shí)保證數(shù)據(jù)庫操作在異常狀態(tài)下保持一致性。 - 防止多個(gè)應(yīng)用程序并發(fā)訪問數(shù)據(jù)庫時(shí),多個(gè)應(yīng)用程序間的操作產(chǎn)生干擾,影響業(yè)務(wù)功能的正常性。
??事務(wù)的特性(ACID)
-
原子性(Atomicity):事務(wù)必須是最小的工作單元,一個(gè)事務(wù)中的所有操作,應(yīng)該做到:
要么全部成功,要么全部失敗
,否則回滾到初始狀態(tài)。 -
一致性(Consistency):事務(wù)在開始和結(jié)束時(shí),數(shù)據(jù)必須保持一致狀態(tài)。通俗說就是
讓數(shù)據(jù)保持邏輯上的“合理性”
,比如:小明給小紅打100塊錢,既要讓小明的賬戶減少100,又要讓小紅的賬戶上增加100塊錢; -
隔離性(Isolation):事務(wù)的隔離性確保并發(fā)執(zhí)行的事務(wù)彼此之間相互隔離,每個(gè)事務(wù)都感覺不到其他并發(fā)事務(wù)的存在。
獨(dú)立執(zhí)行,互不干擾。
-
持久性(Durability):事務(wù)一旦執(zhí)行成功,數(shù)據(jù)將會(huì)
永久保存
到數(shù)據(jù)庫中。
??事務(wù)的隔離級別
隔離級別一覽表
隔離級別 | 描述 | 現(xiàn)象 |
---|---|---|
讀未提交(Read Uncommitted) | 最低隔離級別,一個(gè)事務(wù)可以讀取另一個(gè)未提交事務(wù)的數(shù)據(jù)。 | 臟讀、不可重復(fù)讀、幻讀都可能發(fā)生。 |
讀已提交(Read Committed) | 一個(gè)事務(wù)只能讀取已提交事務(wù)的數(shù)據(jù)。 | 臟讀不會(huì)發(fā)生,但不可重復(fù)讀和幻讀仍然可能發(fā)生。 |
可重復(fù)讀(Repeatable Read) |
MySQL默認(rèn)隔離級別 ,一個(gè)事務(wù)在執(zhí)行過程中多次讀取同一行的數(shù)據(jù)結(jié)果都是一致的 |
臟讀和不可重復(fù)讀不會(huì)發(fā)生,但幻讀仍然可能發(fā)生。 |
串行化(Serializable) | 最高隔離級別,對于同一份數(shù)據(jù)資源同時(shí)只允許一個(gè)事務(wù)進(jìn)行讀寫操作。 | 臟讀、不可重復(fù)讀和幻讀都不會(huì)發(fā)生。 |
隔離級別舉例解讀
我們下面來對每個(gè)隔離級別,提出具體的例子進(jìn)行解讀,供大家理解。所有的例子都以下表為基礎(chǔ)。串行化就不做出具體例子說明了。
id | product_name | price |
---|---|---|
1 | 手機(jī) | 1000 |
2 | 電腦 | 2000 |
3 | 平板 | 800 |
讀未提交
1.A查詢價(jià)格表:select * from price;
2.B修改價(jià)格表中平板的價(jià)格為100,但是并未提交
:update set price=100 where id=3;
3.A再次查詢價(jià)格表時(shí),平板的價(jià)格會(huì)顯示100。
讀已提交
1.A查詢價(jià)格表:select * from price;
2.B修改價(jià)格表中平板的價(jià)格為200,并提交
:update set price=200 where id=3;
3.A再次查詢價(jià)格表時(shí),平板的價(jià)格會(huì)顯示200。
可重復(fù)讀
1.A查詢價(jià)格表:select * from price;
2.B修改價(jià)格表中平板的價(jià)格為300,并提交
:update set price=300 where id=3;
3.A查詢價(jià)格表時(shí),平板的價(jià)格依然是原數(shù)據(jù)
80。
??事務(wù)控制語句
控制語句 | 描述 |
---|---|
BEGIN 或 START TRANSACTION
|
開始一個(gè)新的事務(wù) |
COMMIT |
提交當(dāng)前事務(wù)的修改,使其生效,并永久保存到數(shù)據(jù)庫中 |
ROLLBACK |
回滾當(dāng)前事務(wù)的修改,取消事務(wù)所做的所有修改 |
SAVEPOINT savepoint_name |
創(chuàng)建一個(gè)保存點(diǎn),用于回滾到特定的保存點(diǎn) |
RELEASE SAVEPOINT savepoint_name |
刪除指定的保存點(diǎn) |
ROLLBACK TO SAVEPOINT savepoint_name |
回滾到指定的保存點(diǎn),并取消保存點(diǎn)之后的所有修改 |
??寫在最后
最后感謝大家對于本篇博文的閱讀,如有不足之處還請大家在評論區(qū)留言,以便后續(xù)發(fā)布更適合大家學(xué)習(xí)的博文。文章來源:http://www.zghlxwxcb.cn/news/detail-594937.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-594937.html
到了這里,關(guān)于【MySQL】MySQL事務(wù)保姆級教程(適合MySQL初學(xué)者學(xué)習(xí))的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!