您好,登錄后才能下訂單哦!
本篇內容主要講解“Mysql事務是什么意思”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Mysql事務是什么意思”吧!
上一篇著重談到了MySQL鎖的概念,里面談到了事務的概念,其實大部分開發者對于事務肯定不陌生,事務的概念其實就是一組SQL語句組成一個執行單元,如果單元中的某個SQL語句執行出現異常,則需要將整個事務進行回滾到未修改的狀態。只有單元中全部SQL語句都成功執行,才會提交數據代表事務執行成功。而Mysql其實前幾篇我們都已經知道是支持多種存儲引擎的,其實正是因為MyISAM引擎不支持事務被InnoDB取代的原因。所以本篇文章主要是針對InnoDB引擎詳細了解下事務這個概念。
事務特性
原子性: 事務是一個原子操作單元,其對數據的修改,要么全都執行,要么全都不執行。
一致性:事務中包含的處理要滿足數據庫提前設置的約束,如主鍵約束或者NOT NULL 約束等。
隔離性:事務處理過程中的中間狀態對外部是不可見的。
持久性:事務完成之后,它對于數據的修改是永久性的。
隔離性的四種隔離級別
InnoDB引擎支持的4種事務隔離級別分別是:讀未提交、讀已提交、可重復讀、串行讀。
讀未提交:允許臟讀,可以讀取其他session中未提交的臟數據。
讀已提交:不可讀取其他session尚未提交的數據,只有其他session數據已提交才能讀取到,為不重復讀。
可重復讀:該級別下可重復讀,InnoDB引擎默認采用可重復讀,不允許讀取還未提交的臟數據,但是可能存在InnoDB獨有的幻讀。
串行讀:該級別下隔離程度最高,事務只能一個接著一個串行執行,無法并發執行。每次串行讀都需要獲得表級共享鎖,讀寫操作都會阻塞。
幻讀
事務在插入一條已經經過檢查不存在的記錄,但是插入結果是數據已經存在,之前的檢查操作如同幻影。Mysql默認采用可重復讀級別,所以只可能出現幻讀的情況。
設置事務隔離級別
可以在my.ini文件中[mysqld]下配置transaction-isolation屬性,隔離性的四個值為:READ-UNCOMMITTED、READ-COMMITIED、REPEATABLE-READ、SERIALIZABLE,分別對應讀未提交、讀已提交、可重復讀、串行讀四種隔離級別。
事務分類
事務一般分為兩種:隱式事務和顯示事務。在Mysql中,事務默認是自動提交的,所以說每個DML語句實際上就是一次事務的過程。 隱式事務:沒有開啟和結束的標志,默認執行完SQL語句就自動提交,比如我們經常使用的INSERT、UPDATE、DELETE語句就屬于隱式事務。 顯示事務:需要顯示的開啟關閉,然后執行一系列操作,最后如果全部操作都成功執行,則提交事務釋放連接,如果操作有異常,則回滾事務中的所有操作。
事務使用步驟 開啟事務:關閉自動提交,然后開啟事務。 事務操作:一系列DML語句執行。 事務結束:根據事務操作成功與否選擇提交事務或者回滾事務操作。
接下來我們簡單的使用事務實現用戶A向用戶B轉賬的操作:
創建用戶表并插入兩條用戶數據:
配置數據庫連接信息:
接下來從連接池中取出一個數據庫連接并進行數據庫連接:
數據庫連接成功,則使用connection對象開啟事務:
然后查詢轉賬賬號與待轉賬賬號是否存在,并進行轉賬等一系列操作,這里由于魔鬼回調的原因我這里使用async庫變成鏈式調用:
最后根據事務操作的成功或失敗進行事務提交或者事務回滾,并且釋放數據庫連接:
然后可以測試轉賬成功的情況可以發現轉賬操作成功了
再次測試轉賬失敗的操作可以發現扣除A積分和增加B積分的操作全部被回滾了,所以A和B的積分余額都沒有發生改變
到此,相信大家對“Mysql事務是什么意思”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。