成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

MySQL的事務(wù)與鎖-創(chuàng)新互聯(lián)

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)故障而丟失。

控制事務(wù) 事務(wù)控制語(yǔ)句

通過(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í)別
事物的并發(fā)

數(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ù)讀××
可序列化讀×××
事務(wù)的臟讀

一個(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í)鎖
  • 共享鎖:也叫讀鎖,同一個(gè)數(shù)據(jù)對(duì)象上可以有多把共享鎖,如果一個(gè)事務(wù)在數(shù)據(jù)對(duì)象上加了共享鎖,則該事務(wù)可以讀取數(shù)據(jù),但不能修改,其他事務(wù)可以在該數(shù)據(jù)對(duì)象上繼續(xù)添加共享鎖。
  • 排它鎖:也叫寫(xiě)鎖,同一個(gè)數(shù)據(jù)對(duì)象上只能有一把排它鎖,獲取到數(shù)據(jù)排它鎖的事務(wù)可以讀取和修改數(shù)據(jù)。

查詢(xún)語(yǔ)句select默認(rèn)不會(huì)加任何類(lèi)型鎖,因此當(dāng)數(shù)據(jù)上有了排他鎖,還是可以通過(guò)查詢(xún)語(yǔ)句select獲取到數(shù)據(jù)。

表級(jí)鎖
  • 意向共享鎖(IS):事務(wù)在給數(shù)據(jù)添加行級(jí)共享鎖之前,必須先取得該表的意向共享鎖。
  • 意向排他鎖(IX):事務(wù)在給數(shù)據(jù)添加行級(jí)排他鎖之前,必須先取得該表的意向排他鎖。

意向鎖是InnoDB存儲(chǔ)引擎自維護(hù)的,用戶無(wú)法手動(dòng)操作。

InnoDB的鎖機(jī)制

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ù)拆小。
  • 在同一個(gè)事務(wù)中,盡可能做到一次鎖定所需要的所有資源,減少死鎖概率。
  • 降低隔離級(jí)別。
  • 為表添加合理的索引。

你是否還在尋找穩(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)

成都seo排名網(wǎng)站優(yōu)化
璧山县| 肥乡县| 库伦旗| 大荔县| 仲巴县| 乌苏市| 辉南县| 南汇区| 营山县| 西华县| 海伦市| 历史| 达拉特旗| 宁德市| 奇台县| 正阳县| 霍城县| 封开县| 本溪市| 淮滨县| 玛沁县| 岱山县| 兴仁县| 鄯善县| 盘锦市| 凌源市| 淳安县| 莲花县| 宝应县| 沂源县| 明光市| 阿鲁科尔沁旗| 阿拉善盟| 阳西县| 施秉县| 泰和县| 樟树市| 保定市| 伊通| 博野县| 富宁县|