您好,登錄后才能下訂單哦!
這篇文章主要講解了“mysql事務(wù)知識(shí)點(diǎn)分析”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“mysql事務(wù)知識(shí)點(diǎn)分析”吧!
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ù)的修改是持久的。
事務(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)閉自提交模式。
truncate 是DDL,事務(wù)中不能回滾,會(huì)清空表的自增屬性,回到原始開(kāi)始值。
delete是DML
共同點(diǎn):清空表內(nèi)數(shù)據(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
RU,一個(gè)事務(wù)讀取別的事務(wù)未提交的數(shù)據(jù)。
不可重復(fù)讀:一個(gè)事務(wù)讀取到其他事務(wù)針對(duì)舊數(shù)據(jù)的修改記錄,常見(jiàn)(update,delte)。
幻讀:一個(gè)事務(wù)讀取到其他事務(wù)新增數(shù)據(jù),常見(jiàn)(insert),允許出現(xiàn)在已提交事務(wù)的隔離級(jí)別中。
可重復(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)注!
免責(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)容。