MySQL事物的實(shí)現(xiàn)需要依賴(lài)數(shù)據(jù)庫(kù)提供的鎖。
專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)田林免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了成百上千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。MySQL的事務(wù)MySQL支持MyISAM存儲(chǔ)引擎、Memory存儲(chǔ)引擎、InnoDB存儲(chǔ)引擎,其中只有InnoDB存儲(chǔ)引擎支持事務(wù)。
事務(wù)簡(jiǎn)介 事務(wù)的定義數(shù)據(jù)庫(kù)的事務(wù)由一組DML語(yǔ)句組成,即insert、update、delete。通過(guò)事務(wù)可以保證數(shù)據(jù)庫(kù)中數(shù)據(jù)的完整性,保證這一組DML操作要么全部執(zhí)行,要么全部不執(zhí)行。因此,可以把事務(wù)看成是一個(gè)邏輯工作單元,可以通過(guò)提交或回滾操作來(lái)結(jié)束一個(gè)事務(wù)。當(dāng)事務(wù)被成功提交給數(shù)據(jù)庫(kù)時(shí),事務(wù)會(huì)保證其中所有操作都成功完成且結(jié)果被永久保存在數(shù)據(jù)庫(kù)中;如果有部分操作沒(méi)有成功完成,事務(wù)中的所欲操作都需要被執(zhí)行回滾,數(shù)據(jù)則回到事務(wù)執(zhí)行前的狀態(tài)。
事務(wù)的特性Atomicity
:原子性。事務(wù)中的所有DML操作,要么全部執(zhí)行成功,要么全部執(zhí)行失敗,不會(huì)存在一部分執(zhí)行成功,一部風(fēng)執(zhí)行失敗的的情況。事務(wù)在執(zhí)行過(guò)程中發(fā)生錯(cuò)誤,操作的數(shù)據(jù)會(huì)被回滾到事務(wù)開(kāi)始前的狀態(tài)。
Consistency
:一致性。事務(wù)在開(kāi)始執(zhí)行前后執(zhí)行結(jié)束后,數(shù)據(jù)庫(kù)中數(shù)據(jù)的完整性沒(méi)有被破壞。
Isolation
:隔離性。數(shù)據(jù)庫(kù)支持并發(fā)操作,允許多個(gè)客戶端或多個(gè)事務(wù)同時(shí)操作數(shù)據(jù)庫(kù)中的數(shù)據(jù)。隔離性能夠防止各事務(wù)并發(fā)執(zhí)行時(shí)由于交叉執(zhí)行而導(dǎo)致的數(shù)據(jù)不一致。
Durability
:持久性。當(dāng)事務(wù)成功執(zhí)行結(jié)束后,事務(wù)對(duì)數(shù)據(jù)庫(kù)的修改是永久性的。數(shù)據(jù)不會(huì)因?yàn)橄到y(tǒng)故障而丟失。
通過(guò)事務(wù)控制語(yǔ)句可以開(kāi)啟一個(gè)事務(wù)、提交一個(gè)事務(wù)和回滾一個(gè)事務(wù)。MySQL同時(shí)還提供了保存點(diǎn)的機(jī)制,以方便在執(zhí)行事務(wù)發(fā)生錯(cuò)誤的時(shí)候,可以控制事務(wù)回滾的位置。
使用事務(wù)控制語(yǔ)句事物的控制語(yǔ)句 | 作用 |
---|---|
begin或start transaction | 二者都是顯式開(kāi)啟一個(gè)事務(wù) |
commit或commit work | 二者都是提交事務(wù),是已對(duì)數(shù)據(jù)庫(kù)進(jìn)行的所有修改成為永久性的 |
rollback或rollback work | 二者都是回滾事務(wù),并撤銷(xiāo)已經(jīng)修改但未提交的所有操作 |
savepoint [保存點(diǎn)名稱(chēng)] | 在事務(wù)中創(chuàng)建一個(gè)保存點(diǎn),一個(gè)事務(wù)中可以有多個(gè)保存點(diǎn) |
rollback to [保存點(diǎn)名稱(chēng)] | 回滾事務(wù)到指定保存點(diǎn) |
releasesavepoint [保存點(diǎn)名稱(chēng)] | 刪除事務(wù)中的保存點(diǎn) |
set transaction | 設(shè)置事務(wù)的隔離級(jí)別 |
數(shù)據(jù)庫(kù)允許多個(gè)客戶端同時(shí)訪問(wèn),當(dāng)這些客戶端并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)中的同一部分?jǐn)?shù)據(jù)時(shí),如果沒(méi)有采取必要的隔離措施就容易造成并發(fā)一致性問(wèn)題,從而破壞數(shù)據(jù)的完整性。
MySQL事物的隔離級(jí)別事務(wù)的隔離級(jí)別 | 臟讀 | 不可重復(fù)讀 | 幻讀 |
---|---|---|---|
讀未提交 | √ | √ | √ |
讀已提交 | × | √ | √ |
可重復(fù)讀 | × | × | √ |
可序列化讀 | × | × | × |
一個(gè)事務(wù)讀取到了另一個(gè)事務(wù)還未提交的數(shù)據(jù)。
事務(wù)的不可重復(fù)讀指在同一個(gè)事務(wù)中,前后兩次讀取的數(shù)據(jù)結(jié)果不一致。
MySQL的鎖MySQL采用鎖的機(jī)制來(lái)解決并發(fā)一致性問(wèn)題,從而保證事務(wù)的隔離性。當(dāng)一個(gè)事務(wù)在進(jìn)行操作時(shí)會(huì)對(duì)操作的數(shù)據(jù)進(jìn)行加鎖,從而限制另一個(gè)事務(wù)的操作。
InnoDB鎖的類(lèi)型InnoDB存儲(chǔ)引擎支持行級(jí)鎖和表級(jí)鎖,默認(rèn)采用行級(jí)鎖。
行級(jí)鎖表級(jí)鎖查詢(xún)語(yǔ)句select默認(rèn)不會(huì)加任何類(lèi)型鎖,因此當(dāng)數(shù)據(jù)上有了排他鎖,還是可以通過(guò)查詢(xún)語(yǔ)句select獲取到數(shù)據(jù)。
InnoDB的鎖機(jī)制意向鎖是InnoDB存儲(chǔ)引擎自維護(hù)的,用戶無(wú)法手動(dòng)操作。
InnoDB的行鎖是通過(guò)索引實(shí)現(xiàn)的,因此只有通過(guò)索引查詢(xún)數(shù)據(jù)時(shí),InnoDB才會(huì)使用行級(jí)鎖。
死鎖MySQL的行級(jí)鎖是針對(duì)索引加的鎖,不是針對(duì)表中的行加級(jí)鎖。雖然是訪問(wèn)不同行的記錄,但如果表中不存在對(duì)應(yīng)的索引,或者使用了不同的索引,就會(huì)造成鎖的沖突而鎖住整張表。
死鎖是指兩個(gè)或兩個(gè)以上的事務(wù)在執(zhí)行過(guò)程中,因?yàn)榛ハ嗟却蛘咭驗(yàn)闋?zhēng)奪相同的資源而造成的互相等待的現(xiàn)象。
避免死鎖你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前標(biāo)題:MySQL的事務(wù)與鎖-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://jinyejixie.com/article24/dipsce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、全網(wǎng)營(yíng)銷(xiāo)推廣、App設(shè)計(jì)、網(wǎng)站內(nèi)鏈、小程序開(kāi)發(fā)、網(wǎng)頁(yè)設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容