「前言」文章內(nèi)容大致是MySQL事務(wù)管理。
「歸屬專欄」MySQL
「主頁鏈接」個人主頁
「筆者」楓葉先生(fy)
一、事務(wù)概念
事務(wù)的概念
- MySQL事務(wù)是指一系列的數(shù)據(jù)庫操作(一組
DML
語句),這些操作要么全部成功執(zhí)行,要么全部失敗回滾。事務(wù)的目的是確保數(shù)據(jù)庫的一致性和完整性 - 事務(wù)就是要做的或所做的事情,主要用于處理操作量大,復(fù)雜度高的數(shù)據(jù)。
- 假設(shè)一個電商網(wǎng)站的訂單支付場景。在這個場景中,訂單支付涉及到多個步驟和多個數(shù)據(jù)表的操作,如訂單表、庫存表和支付記錄表等。
- 例如,當(dāng)用戶點(diǎn)擊支付按鈕時,開始一個事務(wù),然后依次執(zhí)行創(chuàng)建訂單、扣減庫存和創(chuàng)建支付記錄的操作。如果其中任何一個操作失敗,整個事務(wù)會被回滾,訂單不會被創(chuàng)建,庫存不會被扣減,支付記錄也不會被創(chuàng)建。只有當(dāng)所有操作都成功執(zhí)行后,事務(wù)才會被提交,訂單支付完成
- 這樣,需要多條MySQL語句構(gòu)成,那么所有這些操作合起來,就構(gòu)成了一個事務(wù)
- 再次回憶DML:
DML【data manipulation language】
數(shù)據(jù)操縱語言,用來對數(shù)據(jù)進(jìn)行操作代表指令:insert,delete、update
。DML中又單獨(dú)分了一個DQL
,數(shù)據(jù)查詢語言,代表指令:select
MySQL同一時刻可能存在大量事務(wù),如果不對這些事務(wù)加以控制,在執(zhí)行時就可能會出現(xiàn)問題。
每條事務(wù)至少一條SQL或者很多條的SQL,這樣如果大家都訪問同樣的表數(shù)據(jù),在不加保護(hù)的情況,就絕對會出現(xiàn)問題。甚至,因?yàn)槭聞?wù)由多條SQL構(gòu)成,那么,也會存在執(zhí)行到一半出錯或者不想再執(zhí)行的情況,那么已經(jīng)執(zhí)行的怎么辦?
因此一個完整的事務(wù)并不是簡單的SQL集合,事務(wù)還需要滿足如下四個屬性:
-
原子性:一個事務(wù)(
transaction
)中的所有操作,要么全部完成,要么全部不完成,不會結(jié)束在中間某個環(huán)節(jié)。事務(wù)在執(zhí)行過程中發(fā)生錯誤,會被回滾(Rollback
)到事務(wù)開始前的狀態(tài),就像這個事務(wù)從來沒有執(zhí)行過一樣 - 一致性:在事務(wù)開始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預(yù)設(shè)規(guī)則,這包含資料的精確度、串聯(lián)性以及后續(xù)數(shù)據(jù)庫可以自發(fā)性地完成預(yù)定的工作
-
隔離性:數(shù)據(jù)庫允許多個并發(fā)事務(wù)同時對其數(shù)據(jù)進(jìn)行讀寫和修改的能力,隔離性可以防止多個事務(wù)并發(fā)執(zhí)行時由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致。事務(wù)隔離分為不同級別,包括讀未提交(
Read uncommitted
)、讀提交(read committed
)、可重復(fù)讀(repeatable read
)和串行化(Serializable
) - 持久性:事務(wù)處理結(jié)束后,對數(shù)據(jù)的修改就是永久的,即便系統(tǒng)故障也不會丟失
上面的四個屬性簡稱ACID
:
- 原子性(
Atomicity
,又稱不可分割性) - 一致性(
Consistency
) - 隔離性(
Isolation
,又稱獨(dú)立性) - 持久性(
Durability
)
為什么會出現(xiàn)事務(wù)
- 事務(wù)被MySQL編寫者設(shè)計出來,本質(zhì)是為了當(dāng)應(yīng)用程序訪問數(shù)據(jù)庫的時候,事務(wù)能夠簡化我們的編程模型,不需要用戶自己去考慮各種各樣的潛在錯誤和并發(fā)問題
- 如果MySQL只是單純的提供數(shù)據(jù)存儲服務(wù),那么用戶在訪問數(shù)據(jù)庫時就需要自行考慮各種潛在問題,包括網(wǎng)絡(luò)異常、服務(wù)器宕機(jī)等。
- 因此事務(wù)本質(zhì)是為了應(yīng)用服務(wù)的,而不是伴隨著數(shù)據(jù)庫系統(tǒng)天生就有的,而是后面使用了數(shù)據(jù)庫一段時間之后,發(fā)現(xiàn)是需要事務(wù)這個功能的,MySQL的編寫者就對事務(wù)進(jìn)行的封裝和支持
二、事務(wù)的版本支持
在 MySQL 中只有使用了Innodb
數(shù)據(jù)庫引擎的數(shù)據(jù)庫或表才支持事務(wù), MyISAM
不支持
通過以下命令查看MySQL的數(shù)據(jù)庫引擎,查看哪些引擎支持事務(wù)
show engines;
說明:
-
Transactions
:表示存儲引擎是否支持事務(wù),可以看到InnoDB
存儲引擎支持事務(wù),而MyISAM存儲引擎不支持事務(wù)
三、事務(wù)提交方式
事務(wù)常見的提交方式有兩種,分別是自動提交和手動提交
查看事務(wù)的提交方式:
show variables like 'autocommit';
注:ON
表示自動提交被打開,值為OFF
表示自動提交被關(guān)閉,即事務(wù)的提交方式為手動提交
可以用SET
來改變MySQL的自動提交模式
SET AUTOCOMMIT=0; --禁止自動提交
SET AUTOCOMMIT=1; --開啟自動提交
注:設(shè)置為0表示關(guān)閉自動提交,相當(dāng)于將事務(wù)提交方式設(shè)置為手動提交
四、事務(wù)常見的操作方式
為了便于演示,需要將MySQL的隔離級別設(shè)置成讀未提交,也就是把隔離級別設(shè)置的比較低,方便看到實(shí)驗(yàn)現(xiàn)象
隔離級有:(隔離級別依次提高,讀未提交隔離級別最低)
- 讀未提交(
Read uncommitted
) - 讀提交(
read committed
) - 可重復(fù)讀(
repeatable read
) - 串行化(
Serializable
)
設(shè)置最低的隔離級別:
set global transaction isolation level read uncommitted;
注意:設(shè)置全局隔離級別后當(dāng)前會話的隔離級別不會改變,只會影響后續(xù)與MySQL新建立的連接,因此需要重啟終端才能看到會話的隔離級別被成功設(shè)置
重啟客戶端之后,再進(jìn)行登錄,查看如下:
然后創(chuàng)建測試表
create table if not exists account(
id int primary key,
name varchar(50) not null default '',
blance decimal(10,2) not null default 0.0
)ENGINE=InnoDB DEFAULT CHARSET=UTF8;
4.1 事務(wù)正常操作
測試1
啟動兩個終端,兩個終端都各啟動一個事務(wù)(右邊不啟動事務(wù)也行),啟動事務(wù)使用以下命令任意一個:
begin;
-- or
start transaction;
啟動事務(wù)之后,查詢該表是沒有數(shù)據(jù)的
注:這里事務(wù)提交方式為自動提交
左終端中的事務(wù)使用savepoint
命令創(chuàng)建一個保存點(diǎn),該命令用于設(shè)置一個保存點(diǎn)
savepoint 保存點(diǎn)名字;
在左終端中插入一條數(shù)據(jù),在右終端中就能查看到左終端的事務(wù)向表中插入的記錄
左終端中的事務(wù)使用savepoint
命令創(chuàng)建一個保存點(diǎn),然后繼續(xù)向表中插入一條記錄,這時在右終端中也能看到新插入的這條記錄(讀未提交)
左終端中的事務(wù)使用rollback
命令回滾到事務(wù)
rollback to 保存點(diǎn); -- 事務(wù)回滾到該保存點(diǎn)
rollback; -- 默認(rèn)回滾到事務(wù)的最開始
事務(wù)回滾到保存點(diǎn)s2,這時右終端在查看表中數(shù)據(jù)時就看不到剛才插入的第二條記錄了
左終端中的事務(wù)直接使用rollback
命令回滾到事務(wù)最開始,右邊的終端查詢數(shù)據(jù)為空
使用commit
命令,可以提交事務(wù)(代表一個事務(wù)結(jié)束),提交事務(wù)后就不能回滾了
注意:提交事務(wù)之后就不能回滾了,再次rollback
也無法回滾
上面是事務(wù)操作的正常情況,而事務(wù)更多是為了應(yīng)對非正常的情況,比如MySQL客戶端突然崩潰,不小心關(guān)閉等等
4.2 事務(wù)異常驗(yàn)證
演示1(體現(xiàn)事務(wù)的原子性)
目的:證明事務(wù)未commit
,客戶端崩潰,MySQL自動會回滾(隔離級別設(shè)置為讀未提交,事務(wù)提交方式為自動提交)
兩個終端都各啟動一個事務(wù),表中事先有一條數(shù)據(jù)(右邊不啟動事務(wù)也行)
左終端中的事務(wù)向表中插入一條記錄,由于隔離級別是讀未提交,因此在右終端中能夠查詢到插入的這條記錄
左邊的客戶端異常退出ctrl + \
(沒有提交事務(wù))
結(jié)果是MySQL會自動讓事務(wù)回滾到最開始,這時右終端中就看不到之前插入的記錄了
演示2(體現(xiàn)事務(wù)的持久性)
目的:證明事務(wù)commit
了,即使客戶端崩潰,MySQL數(shù)據(jù)不會在受影響,數(shù)據(jù)已經(jīng)持久化(已經(jīng)保存到磁盤),(隔離級別依舊設(shè)置為讀未提交,事務(wù)提交方式為自動提交)
兩個終端都各啟動一個事務(wù)(右邊不啟動事務(wù)也行)
左終端中的事務(wù)向表中插入一條記錄,由于隔離級別是讀未提交,因此在右終端中能夠查詢到插入的這條記錄
左終端進(jìn)行提交事務(wù),然后再異常退出
右終端中仍然可以看到之前插入的記錄,因?yàn)槭聞?wù)提交后數(shù)據(jù)就被持久化了
即使是事務(wù)自動提交關(guān)閉了,只要commit
了,數(shù)據(jù)依舊就被持久化了,下面實(shí)驗(yàn)3進(jìn)行驗(yàn)證
演示3(驗(yàn)證實(shí)驗(yàn))
目的:證明begin
操作會自動更改提交方式,不會受MySQL是否自動提交影響
關(guān)閉自動提交
set autocommit = 0;
左終端中啟動一個事務(wù)并向表中新插入一條記錄(右邊也可以啟動一個事務(wù)),由于隔離級別是讀未提交,因此在右終端中能夠查詢到新插入的這條記錄
左終端進(jìn)行提交事務(wù),然后再異常退出,右終端中仍然可以看到之前插入的記錄,因?yàn)槭聞?wù)提交后數(shù)據(jù)就被持久化了
上述說明:使用begin
或start transaction
·命令啟動的事務(wù),都必須要使用commit
命令手動提交,數(shù)據(jù)才會被持久化,與是否設(shè)置autocommit
無關(guān)
演示4
目的:證明單條SQL與事務(wù)的關(guān)系
左右兩邊的終端都關(guān)閉自動提交,右邊不關(guān)也行(右邊不影響操作)
set autocommit = 0;
不啟動事務(wù),直接刪除一條數(shù)據(jù),由于隔離級別是讀未提交,右邊的終端也能看到結(jié)果
執(zhí)行完單條SQL語句后,左邊的客戶端直接異常退出;而右邊終端被刪除的數(shù)據(jù)被回滾回來了
左邊的終端打開自動提交,右邊不影響操作
set autocommit = 1;
不啟動事務(wù),直接刪除一條數(shù)據(jù),由于隔離級別是讀未提交,右邊的終端也能看到結(jié)果
執(zhí)行完單條SQL語句后,左邊的客戶端直接異常退出,右邊的數(shù)據(jù)沒有發(fā)生變化,即左邊終端的操作沒有被回滾
實(shí)驗(yàn)結(jié)果說明:實(shí)際我們之前一直都在使用單SQL事務(wù),只不過autocommit
默認(rèn)是打開的,因此單SQL事務(wù)執(zhí)行后自動就被提交了
- 全局變量
autocommit
是否被設(shè)置影響的是單條SQL語句,InnoDB
中的每一條SQL都會默認(rèn)被封裝成事務(wù) - 如果
autocommit
為ON
,則單條SQL語句執(zhí)行后會自動被提交,如果為OFF
,則SQL語句執(zhí)行后需要使用commit
進(jìn)行手動提交,如果不手動提交,執(zhí)行的SQL會發(fā)生回滾
上述實(shí)驗(yàn)結(jié)論
- 只要輸入
begin
或者start transaction
,事務(wù)便必須要通過commit
提交,才會持久化,與是否設(shè)置set autocommit
無關(guān) - 事務(wù)可以手動回滾,同時,當(dāng)操作異常,MySQL會自動回滾
- 對于
InnoDB
每一條 SQL 語言都默認(rèn)封裝成事務(wù),自動提交(select有特殊情況,因?yàn)镸ySQL有MVCC
, 下面談) - 上述實(shí)驗(yàn)體現(xiàn)了事務(wù)本身的原子性(
rollback
),持久性(commit
)
事務(wù)操作注意事項
- 如果沒有設(shè)置保存點(diǎn),也可以回滾,只能回滾到事務(wù)的開始。直接使用
rollback
(前提是事務(wù)還沒有提交) - 如果一個事務(wù)被提交了(
commit
),則不可以回退(rollback
) - 事務(wù)可以選擇回退到哪個保存點(diǎn)(前提是事務(wù)還沒有提交)
-
InnoDB
支持事務(wù),MyISAM
不支持事務(wù)
五、事務(wù)隔離級別
- MySQL服務(wù)可能會同時被多個客戶端進(jìn)程(線程)訪問,訪問的方式以事務(wù)的方式進(jìn)行
- 一個事務(wù)可能由多條SQL語句構(gòu)成,也就意味著任何一個事務(wù),都有執(zhí)行前、執(zhí)行中和執(zhí)行后三個階段
- 而所謂的原子性就是讓用戶層要么看到執(zhí)行前,要么看到執(zhí)行后,執(zhí)行中如果出現(xiàn)問題,可以隨時進(jìn)行回滾,所以單個事務(wù)對用戶表現(xiàn)出來的特性就是原子性
- 但畢竟每個事務(wù)都有一個執(zhí)行的過程,在多個事務(wù)各自執(zhí)行自己的多條SQL時,仍然可能會出現(xiàn)互相影響的情況,比如多個事務(wù)同時訪問同一張表,甚至是表中的同一條記錄
- 數(shù)據(jù)庫為了保證事務(wù)執(zhí)行過程中盡量不受干擾,于是出現(xiàn)了隔離性
- 數(shù)據(jù)庫為了允許事務(wù)在執(zhí)行過程中受到不同程度的干擾,于是出現(xiàn)了隔離級別
隔離級別:(依次提高)
-
讀未提交(
Read Uncommitted
):在該隔離級別,所有的事務(wù)都可以看到其他事務(wù)沒有提交的執(zhí)行結(jié)果(實(shí)際生產(chǎn)中不可能使用這種隔離級別的),但是相當(dāng)于沒有任何隔離性,也會有很多并發(fā)問題,如臟讀,幻讀,不可重復(fù)讀等,我們上面為了做實(shí)驗(yàn)方便,用的就是這個隔離性 -
讀提交(
Read Committed
):該隔離級別是大多數(shù)數(shù)據(jù)庫的默認(rèn)的隔離級別(不是 MySQL 默
認(rèn)的)。它滿足了隔離的簡單定義:一個事務(wù)只能看到其他的已經(jīng)提交的事務(wù)所做的改變。這種隔離級別會引起不可重復(fù)讀,即一個事務(wù)執(zhí)行時,如果多次 select,可能得到不同的結(jié)果 -
可重復(fù)讀(
Repeatable Read
):這是MySQL默認(rèn)的隔離級別,它確保同一個事務(wù),在執(zhí)行中,多次讀取操作數(shù)據(jù)時,會看到同樣的數(shù)據(jù)行,但是會有幻讀問題 -
串行化(
Serializable
):這是事務(wù)的最高隔離級別,它通過強(qiáng)制事務(wù)排序,使之不可能相互沖突,從而解決了幻讀的問題。它在每個讀的數(shù)據(jù)行上面加上共享鎖,但是可能會導(dǎo)致超時和鎖競爭(這種隔離級別太極端,實(shí)際生產(chǎn)基本不使用)
隔離級別基本都是通過鎖實(shí)現(xiàn)的,不同的隔離級別,鎖的使用是不同的。常見有,表鎖,行鎖,讀鎖,寫鎖,間隙鎖(GAP
),Next-Key
鎖(GAP+行鎖)等
5.1 查看與設(shè)置隔離性
查看全局隔級別
select @@global.tx_isolation;
查看當(dāng)前會話隔離級別
select @@session.tx_isolation;
還可以使用以下命令查看當(dāng)前會話的隔離級別
select @@tx_isolation;
設(shè)置當(dāng)前會話隔離級別
set session transaction isolation level 隔離級別;
例如,給當(dāng)前會話設(shè)置串行化
set session transaction isolation level serializable;
注:設(shè)置當(dāng)前會話的隔離級別只會影響當(dāng)前會話,新起的會話依舊采用全局的隔離級
設(shè)置全局隔離級別
set global transaction isolation level 隔離級別;
比如設(shè)置全局可重復(fù)讀
注意:設(shè)置全局隔離級別會影響后續(xù)的新會話,但是不會影響當(dāng)前會話,如果需要讓全局隔離級別生效,需要重啟該客戶端
下面進(jìn)行實(shí)驗(yàn)演示,演示四個隔離級別
5.2 讀未提交(Read Uncommitted)
啟動兩個終端,將隔離級別都設(shè)置為讀未提交,然后查看表中數(shù)據(jù)
set session transaction isolation level read uncommitted;
左右兩個終端各啟動一個事務(wù),左邊終端對表中數(shù)據(jù)進(jìn)行修改,左邊終端的事務(wù)沒有提交右邊終端的事務(wù)可以看到修改的數(shù)據(jù)
說明:
- 像這種,一個事務(wù)在執(zhí)行中,讀到另一個執(zhí)行中事務(wù)的更新(或其他操作)但是未
commit
的數(shù)據(jù),這種現(xiàn)象叫做臟讀(dirty read
) - 讀未提交是事務(wù)的最低隔離級別,幾乎沒有加鎖,雖然效率高,但是問題比較多,所以嚴(yán)重不建議使用
5.3 讀提交(Read Committed)
啟動兩個終端,將隔離級別都設(shè)置為讀提交,然后查看表中數(shù)據(jù)
兩個終端各自啟動一個事務(wù),左終端進(jìn)行對表中數(shù)據(jù)修改,在左終端事務(wù)未提交之前,右終端的事務(wù)看不到另一個事務(wù)的對數(shù)據(jù)的修改結(jié)果
只有當(dāng)左終端中的事務(wù)提交后,右終端中的事務(wù)才能看到修改后的數(shù)據(jù)
說明:
- 像這種,當(dāng)前事務(wù)并未
commit
和當(dāng)前事務(wù)提交事務(wù)這兩個時間段,另一個事務(wù)在這兩個時間段讀取到了不同的值,這種現(xiàn)象叫做不可重復(fù)讀(non reapeatable read
) - 這種現(xiàn)象可能會導(dǎo)致數(shù)據(jù)的一致性問題,因?yàn)橐粋€事務(wù)在不同的時間點(diǎn)讀取到不同的數(shù)據(jù)值,可能會產(chǎn)生錯誤的計算結(jié)果或邏輯錯誤,不建議使用該隔離級別
5.4 可重復(fù)讀(Repeatable Read)
啟動兩個終端,將隔離級別都設(shè)置為可重復(fù)讀,然后查看表中數(shù)據(jù)
兩個終端各自啟動一個事務(wù),左終端中的事務(wù)所作的修改在沒有提交之前,右終端中的事務(wù)無法看到
并且當(dāng)左終端中的事務(wù)提交后,右終端中的事務(wù)仍然看不到修改后的數(shù)據(jù)
只有當(dāng)右終端中的事務(wù)提交事務(wù)之后,再查看表中數(shù)據(jù),此時才能看到表中數(shù)據(jù)
說明:
- 向上面這樣的,稱之為可重復(fù)讀
- 但是,一般的數(shù)據(jù)庫在可重復(fù)讀情況的時候,
update
數(shù)據(jù)是滿足可重復(fù)讀的,但insert
數(shù)據(jù)會存在幻讀問題,因?yàn)楦綦x性是通過對數(shù)據(jù)加鎖完成的,而新插入的數(shù)據(jù)原本是不存在的,因此一般的加鎖無法屏蔽這類問題 - 但是MySQL解決了可重復(fù)讀隔離級別下的幻讀問題(通過
Next-Key
鎖(GAP
+行鎖)來解決幻讀問題) - 幻讀:一個事務(wù)在執(zhí)行過程中,相同的select語句查詢得到了不同的數(shù)據(jù)(出現(xiàn)新數(shù)據(jù)),如同出現(xiàn)了幻覺,這種現(xiàn)象叫做幻讀
下面演示MySQL的可重復(fù)讀是沒有幻讀問題
啟動兩個終端,將隔離級別都設(shè)置為可重復(fù)讀,然后查看表中數(shù)據(jù)
然后兩個終端各自啟動一個事務(wù),左終端向表中插入新數(shù)據(jù)并提交事務(wù),右終端中的事務(wù)仍然看不到新插入的數(shù)據(jù)(證明沒有幻讀問題)
5.5 串行化(Serializable)
啟動兩個終端,將隔離級別都設(shè)置為串行化,然后查看表中數(shù)據(jù)
然后兩個終端各自啟動一個事務(wù),如果這兩個事務(wù)都對表進(jìn)行的是讀操作,那么這兩個事務(wù)可以并發(fā)執(zhí)行,不會被阻塞
果這兩個事務(wù)中有一個事務(wù)要對表進(jìn)行寫操作,那么這個事務(wù)就會立即被阻塞
直到右邊終端事務(wù)提交了之后,左終端的事務(wù)才能對表進(jìn)行修改操作
說明:
- 對所有操作全部加鎖,進(jìn)行串行化,不會有問題,但是只要串行化,效率很低,幾乎完全不會被采用
5.6 隔離級別總結(jié)
- 其中隔離級別越嚴(yán)格,安全性越高,但數(shù)據(jù)庫的并發(fā)性能也就越低,往往需要在兩者之間找一個平 衡點(diǎn)
- mysql 默認(rèn)的隔離級別是可重復(fù)讀,一般情況下不要修改
隔離級別總結(jié)如下:
六、一致性
事務(wù)執(zhí)行的結(jié)果,必須使數(shù)據(jù)庫從一個一致性狀態(tài),變到另一個一致性狀態(tài)。當(dāng)數(shù)據(jù)庫只包含事務(wù)
成功提交的結(jié)果時,數(shù)據(jù)庫處于一致性狀態(tài)。文章來源:http://www.zghlxwxcb.cn/news/detail-703080.html
- 事務(wù)在執(zhí)行過程中如果發(fā)生錯誤,則需要自動回滾到事務(wù)最開始的狀態(tài),就像這個事務(wù)從來沒有執(zhí)行過一樣,即一致性需要原子性來保證
- 事務(wù)處理結(jié)束后,對數(shù)據(jù)的修改必須是永久的,即便系統(tǒng)故障也不能丟失,即一致性需要持久性來保證
- 多個事務(wù)同時訪問同一份數(shù)據(jù)時,必須保證這多個事務(wù)在并發(fā)執(zhí)行時,不會因?yàn)橛捎诮徊鎴?zhí)行而導(dǎo)致數(shù)據(jù)的不一致,即一致性需要隔離性來保證
- 其實(shí)一致性和用戶的業(yè)務(wù)邏輯強(qiáng)相關(guān),一般MySQL提供技術(shù)支持,但是一致性還是要用戶業(yè)務(wù)邏輯做支撐,也就是說一致性,是由用戶決定的
- 在技術(shù)上,一致性需要原子性、持久性和隔離性來保證
--------------------- END ----------------------文章來源地址http://www.zghlxwxcb.cn/news/detail-703080.html
「 作者 」 楓葉先生
「 更新 」 2023.9.7
「 聲明 」 余之才疏學(xué)淺,故所撰文疏漏難免,
或有謬誤或不準(zhǔn)確之處,敬請讀者批評指正。
到了這里,關(guān)于【MySQL系列】MySQL的事務(wù)管理的學(xué)習(xí)(一)_ 事務(wù)概念 | 事務(wù)操作方式 | 事務(wù)隔離級別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!