十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章主要講解了“Mysql事務(wù)以及加鎖機(jī)制詳解”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Mysql事務(wù)以及加鎖機(jī)制詳解”吧!
事務(wù)的特征ACID,即原子性、一致性、隔離性、持久性。
原子性保證一個(gè)事務(wù)為一個(gè)最小的單元,內(nèi)部不可分割;
一致性保證事務(wù)中的每個(gè)操作線程不可單獨(dú)提交,成功則一起提交,不成功則事務(wù)回滾;
隔離性保證不同事務(wù)間看到的數(shù)據(jù)視圖相互獨(dú)立,相互隔離(隔離級(jí)別可設(shè)置);
持久性保證事務(wù)提交后數(shù)據(jù)會(huì)持久的保存下來;
sql規(guī)范定義的事務(wù)的隔離級(jí)別:
1.READ UNCOMMITTED(讀取未提交內(nèi)容)
所有事務(wù)可以看到未提交事務(wù)的執(zhí)行結(jié)果,本隔離級(jí)別很少用到實(shí)際應(yīng)用中,讀取未提交的數(shù)據(jù),又稱為“臟讀”。
2.READ COMMITTED(讀取提交內(nèi)容)
大多數(shù)的默認(rèn)隔離級(jí)別是此級(jí)別,但不是默認(rèn)的。一個(gè)事務(wù)在開始的時(shí)候只能看見已提交事務(wù)所做的改變。一個(gè)事務(wù)從開始到提交前所做的任何改變都是不可見的,除非提交。這種隔離級(jí)別也稱為不可重復(fù)讀。
3.REPEATABLE READ(可重復(fù)讀)
此隔離級(jí)別是為了解決可重復(fù)讀隔離級(jí)別導(dǎo)致的問題即一個(gè)事務(wù)多個(gè)實(shí)例并發(fā)讀取數(shù)據(jù)時(shí)會(huì)看到不同的結(jié)果。此隔離級(jí)別不會(huì)看到其他事務(wù)提交后的結(jié)果,即事務(wù)即使提交了我也看不到。此級(jí)別也稱為“幻讀”。
4.SERIALIZABLE(可串行化)
可串行化是高的隔離級(jí)別,它通過強(qiáng)制事務(wù)排序,使之不可重讀,解決了幻讀的問題。此隔離級(jí)別會(huì)在每個(gè)讀的數(shù)據(jù)行上加共享鎖,使用這種隔離級(jí)別會(huì)產(chǎn)生大量的超時(shí)現(xiàn)象,一般實(shí)際開發(fā)中不會(huì)用到。
mysql加鎖機(jī)制 :
根據(jù)類型可分為共享鎖(SHARED LOCK)和排他鎖(EXCLUSIVE LOCK)或者叫讀鎖(READ LOCK)和寫鎖(WRITE LOCK)。
根據(jù)粒度劃分又分表鎖和行鎖。表鎖由數(shù)據(jù)庫(kù)服務(wù)器實(shí)現(xiàn),行鎖由存儲(chǔ)引擎實(shí)現(xiàn)。
mysql提供了3種事務(wù)型存儲(chǔ)引擎,InnDB、NDB Cluster和Falcon。
一個(gè)事務(wù)執(zhí)行的任何過程中都可以獲得鎖,但是只有事務(wù)提交或回滾的時(shí)候才釋放這些鎖。這些都是隱式鎖定,也可以顯式鎖定,InnoDB支持顯式鎖定,例如:
SELECT .... LOCK IN SHARE MODE (加共享鎖)
SELECT .....FOR UPDATE(加排他鎖)
感謝各位的閱讀,以上就是“Mysql事務(wù)以及加鎖機(jī)制詳解”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Mysql事務(wù)以及加鎖機(jī)制詳解這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!