溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

mysql事務(wù)知識(shí)點(diǎn)分析

發(fā)布時(shí)間:2021-11-10 11:28:30 來(lái)源:億速云 閱讀:127 作者:iii 欄目:MySQL數(shù)據(jù)庫(kù)

這篇文章主要講解了“mysql事務(wù)知識(shí)點(diǎn)分析”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“mysql事務(wù)知識(shí)點(diǎn)分析”吧!

1.  事務(wù)

1.1.  事務(wù)的特性

InnoDB存儲(chǔ)引擎支持事務(wù),默認(rèn)自提交模式,如要開(kāi)啟事務(wù),必須以begin命令開(kāi)始,以commit或者rollback結(jié)束。

事務(wù)特性

l  原子性(Atomiity):要么都做,要么都不做。

l  一致性(Consistency):操作前后滿(mǎn)足業(yè)務(wù)規(guī)則約束。

l  隔離性(Isolation):多個(gè)并發(fā)事務(wù)互不影響。

l  持久性(Durabili):事務(wù)結(jié)束,對(duì)數(shù)據(jù)的修改是持久的。

1.2.  事務(wù)語(yǔ)句

事務(wù)開(kāi)啟語(yǔ)句由begin或start transaction(read write|read only)命令開(kāi)始,結(jié)束用commit或rollback顯示結(jié)束。

隱式提交:DDL操作或再次輸入begin和start transaction命令。

隱式回滾:退出會(huì)話(huà)、連接超時(shí)、關(guān)機(jī)等。

關(guān)閉自提交特性(set autocommit=0)

開(kāi)啟自提交特性(set autocommit=1)

關(guān)閉自動(dòng)提交好處:不用一個(gè)事務(wù)一次提交,多個(gè)事務(wù)一起體驕傲,提高處理能力。

關(guān)閉自提交壞處:如一事務(wù)長(zhǎng)期不提交,導(dǎo)致行鎖等待,影響數(shù)據(jù)庫(kù)TPS值。

不建議關(guān)閉自提交模式。

1.3.  truncate和delete的區(qū)別

truncate 是DDL,事務(wù)中不能回滾,會(huì)清空表的自增屬性,回到原始開(kāi)始值。

delete是DML

共同點(diǎn):清空表內(nèi)數(shù)據(jù),

1.4.  事務(wù)的隔離級(jí)別

SQL標(biāo)準(zhǔn)的4鐘隔離級(jí)別

n  讀未提交(read uncommitted),RU,一個(gè)事務(wù)可以讀取到其他事務(wù)未提交的數(shù)據(jù)變化,叫臟讀,生產(chǎn)環(huán)境不建議使用。

n  讀已提交(read committed),RC,一個(gè)事務(wù)可以讀其他事務(wù)已提交的數(shù)據(jù)變化,叫不可重復(fù)讀,是Oracle默認(rèn)事務(wù)隔離級(jí)別。

n  可重復(fù)讀(repetable read),RR,一個(gè)事務(wù)中,直到事務(wù)結(jié)束前,都可以反復(fù)讀取到事務(wù)剛開(kāi)始時(shí)看到的數(shù)據(jù),并一直不發(fā)生變化,避免了臟讀、不可重復(fù)讀、幻讀現(xiàn)象的發(fā)生。mysql默認(rèn)事務(wù)隔離級(jí)別。

n  串行(serializable),在每個(gè)讀的數(shù)據(jù)行上都加表級(jí)共享鎖,在每次寫(xiě)數(shù)據(jù)時(shí)都要加表級(jí)排他鎖。造成InnoDB的并發(fā)能力下降、大量超時(shí)和鎖競(jìng)爭(zhēng)的發(fā)生,不建議用到生產(chǎn)環(huán)境。

查看當(dāng)前庫(kù)隔離級(jí)別

[mysql]>show variables like '%tx_isolation%';

+---------------+-----------------+

| Variable_name | Value           |

+---------------+-----------------+

| tx_isolation  | REPEATABLE-READ |

+---------------+-----------------+

修改全局或當(dāng)前會(huì)話(huà)的事務(wù)隔離級(jí)別

set global|session transaction isolation level

1.5.  臟讀、不可重復(fù)讀、幻讀、可重復(fù)讀

1.5.1.  臟讀

RU,一個(gè)事務(wù)讀取別的事務(wù)未提交的數(shù)據(jù)。

1.5.2.  不可重復(fù)讀與幻讀

不可重復(fù)讀:一個(gè)事務(wù)讀取到其他事務(wù)針對(duì)舊數(shù)據(jù)的修改記錄,常見(jiàn)(update,delte)。

幻讀:一個(gè)事務(wù)讀取到其他事務(wù)新增數(shù)據(jù),常見(jiàn)(insert),允許出現(xiàn)在已提交事務(wù)的隔離級(jí)別中。

1.5.3.  可重復(fù)讀

可重復(fù)讀是mysql默認(rèn)事務(wù)隔離級(jí)別,消除臟讀、不可重復(fù)讀、幻讀等現(xiàn)象,很好保證事務(wù)的一致性。

如在本事務(wù)想讀取別的新增數(shù)據(jù),可如下:

查詢(xún):select * from t for update;

本事務(wù)提交一次:commit;

感謝各位的閱讀,以上就是“mysql事務(wù)知識(shí)點(diǎn)分析”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)mysql事務(wù)知識(shí)點(diǎn)分析這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI