电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

一文帶你徹底了解MySQL事務(wù)機(jī)制

瀏覽:13日期:2023-08-28 20:27:10
目錄何謂事務(wù)?事務(wù)的特性:ACID事務(wù)的操作隔離性引發(fā)的并發(fā)問(wèn)題不可重復(fù)讀和幻讀有什么區(qū)別事務(wù)的隔離級(jí)別MySQL 的隔離級(jí)別是基于鎖實(shí)現(xiàn)的嗎?默認(rèn)隔離級(jí)別解決幻讀的方法總結(jié)

我們?cè)O(shè)想一個(gè)場(chǎng)景,這個(gè)場(chǎng)景中我們需要插入多條相關(guān)聯(lián)的數(shù)據(jù)到數(shù)據(jù)庫(kù),不幸的是,這個(gè)過(guò)程可能會(huì)遇到下面這些問(wèn)題:

數(shù)據(jù)庫(kù)中途突然因?yàn)槟承┰驋斓袅恕?蛻?hù)端突然因?yàn)榫W(wǎng)絡(luò)原因連接不上數(shù)據(jù)庫(kù)了。并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)時(shí),多個(gè)線程同時(shí)寫(xiě)入數(shù)據(jù)庫(kù),覆蓋了彼此的更改。…

上面的任何一個(gè)問(wèn)題都可能會(huì)導(dǎo)致數(shù)據(jù)的不一致性。為了保證數(shù)據(jù)的一致性,系統(tǒng)必須能夠處理這些問(wèn)題。事務(wù)就是我們抽象出來(lái)簡(jiǎn)化這些問(wèn)題的首選機(jī)制。

事務(wù)的概念起源于數(shù)據(jù)庫(kù),目前已經(jīng)成為一個(gè)比較廣泛的概念。

何謂事務(wù)?

一個(gè)事情由n個(gè)單元組成,這n個(gè)單元在執(zhí)行過(guò)程中,要么同時(shí)成功,要么同時(shí)失敗,這就把n個(gè)單元放在了一個(gè)事務(wù)之中。

舉個(gè)簡(jiǎn)單的例子:在不考慮試題正確與否的前提下,一張?jiān)嚲碛啥鄠€(gè)題目構(gòu)成,當(dāng)你答完題交給老師的時(shí)候是將一整張?jiān)嚲斫唤o老師,而不是將每道題單獨(dú)交給老師,在這里試卷就可以理解成一個(gè)事務(wù)。

事務(wù)的特性:ACID

A:原子性(Atomicity),原子性是指事務(wù)是一個(gè)不可分割的工作單位,事務(wù)中的操作,要么都發(fā)生,要么都不發(fā)生。

例:假設(shè)你在購(gòu)物車(chē)?yán)锾砑恿藘杉路荷弦潞脱澴樱?dāng)你把兩件衣服作為一個(gè)訂單提交支付的時(shí)候,要么兩件衣服一起支付成功,要么都失敗,不可能存在上衣付完錢(qián)了,褲子還沒(méi)付完的情況,反之亦然。

C:一致性(Consistency),在一個(gè)事務(wù)中,事務(wù)前后數(shù)據(jù)的完整性必須保持一致。

例:假設(shè)用戶(hù)A和用戶(hù)B兩者的錢(qián)加起來(lái)一共是200,那么不管A和B之間如何轉(zhuǎn)賬,轉(zhuǎn)幾次賬,事務(wù)結(jié)束后兩個(gè)用戶(hù)的錢(qián)相加起來(lái)應(yīng)該還得是200,這就是事務(wù)的一致性。

I:隔離性(Isolation),存在于多個(gè)事務(wù)中,事務(wù)的隔離性是指多個(gè)用戶(hù)并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)時(shí),一個(gè)用戶(hù)的事務(wù)不能被其它用戶(hù)的事務(wù)所干擾,多個(gè)并發(fā)事務(wù)之間數(shù)據(jù)要相互隔離。

例:對(duì)于任意兩個(gè)并發(fā)的事務(wù)T1和T2,在事務(wù)T1看來(lái),T2要么在T1開(kāi)始之前就已經(jīng)結(jié)束,要么在T1結(jié)束之后才開(kāi)始,這樣每個(gè)事務(wù)都感覺(jué)不到有其他事務(wù)在并發(fā)地執(zhí)行。

D:持久性(Durability),持久性是指一個(gè)事務(wù)一旦被提交,它對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變就是永久性的,接下來(lái)即使數(shù)據(jù)庫(kù)發(fā)生故障也不應(yīng)該對(duì)其有任何影響。

例:我們?cè)诓僮鲾?shù)據(jù)庫(kù)時(shí),事務(wù)提交或者回滾都會(huì)直接改變數(shù)據(jù)庫(kù)中的值。

AID是手段,C是目的,AID都是為了保證數(shù)據(jù)的一致性。

事務(wù)的操作

在使用事務(wù)之前,首先我們要開(kāi)啟事務(wù),我們可以通過(guò)start或者begin命令開(kāi)啟事務(wù);如果我們想提交事務(wù)可以手動(dòng)執(zhí)行commit命令,如果我們想回滾事務(wù),可以執(zhí)行rollback命令。

# 開(kāi)啟一個(gè)事務(wù)START TRANSACTION;# 多條 SQL 語(yǔ)句SQL1,SQL2...## 提交事務(wù)COMMIT;

注:在MySQL中事務(wù)的提交是默認(rèn)開(kāi)啟的,可以執(zhí)行show variables like 'autocommit'命令查看,如果是ON則證明自動(dòng)提交已經(jīng)開(kāi)啟,如果為OFF則需要手動(dòng)提交。

隔離性引發(fā)的并發(fā)問(wèn)題

1)臟讀:B事務(wù)讀取到了A事務(wù)尚未提交的數(shù)據(jù);

一個(gè)事務(wù)讀取數(shù)據(jù)并且對(duì)數(shù)據(jù)進(jìn)行了修改,這個(gè)修改對(duì)其他事務(wù)來(lái)說(shuō)是可見(jiàn)的,即使當(dāng)前事務(wù)沒(méi)有提交。這時(shí)另外一個(gè)事務(wù)讀取了這個(gè)還未提交的數(shù)據(jù),但第一個(gè)事務(wù)突然回滾,導(dǎo)致數(shù)據(jù)并沒(méi)有被提交到數(shù)據(jù)庫(kù),那第二個(gè)事務(wù)讀取到的就是臟數(shù)據(jù),這也就是臟讀的由來(lái)。

2)不可重復(fù)讀:B事務(wù)讀到了A事務(wù)已經(jīng)提交的數(shù)據(jù),即B事務(wù)在A事務(wù)提交之前和提交之后讀取到的數(shù)據(jù)內(nèi)容不一致(AB事務(wù)操作的是同一條數(shù)據(jù));

事務(wù) 1 讀取某表中的數(shù)據(jù) A=20,事務(wù) 2 也讀取 A=20,事務(wù) 1 修改 A=A-1,事務(wù) 2 再次讀取 A =19,此時(shí)讀取的結(jié)果和第一次讀取的結(jié)果不同。

3)幻讀/虛讀:B事務(wù)讀到了A事務(wù)已經(jīng)提交的數(shù)據(jù),即A事務(wù)執(zhí)行插入操作,B事務(wù)在A事務(wù)前后讀到的數(shù)據(jù)數(shù)量不一致。

事務(wù) 2 讀取某個(gè)范圍的數(shù)據(jù),事務(wù) 1 在這個(gè)范圍插入了新的數(shù)據(jù),事務(wù) 2 再次讀取這個(gè)范圍的數(shù)據(jù)發(fā)現(xiàn)相比于第一次讀取的結(jié)果多了新的數(shù)據(jù)。

不可重復(fù)讀和幻讀有什么區(qū)別不可重復(fù)讀的重點(diǎn)是內(nèi)容修改或者記錄減少比如多次讀取一條記錄發(fā)現(xiàn)其中某些記錄的值被修改;幻讀的重點(diǎn)在于記錄新增比如多次執(zhí)行同一條查詢(xún)語(yǔ)句(DQL)時(shí),發(fā)現(xiàn)查到的記錄增加了。

幻讀其實(shí)可以看作是不可重復(fù)讀的一種特殊情況,單獨(dú)把區(qū)分幻讀的原因主要是解決幻讀和不可重復(fù)讀的方案不一樣。

舉個(gè)例子:執(zhí)行 delete 和 update 操作的時(shí)候,可以直接對(duì)記錄加鎖,保證事務(wù)安全。而執(zhí)行 insert 操作的時(shí)候,由于記錄鎖(Record Lock)只能鎖住已經(jīng)存在的記錄,為了避免插入新記錄,需要依賴(lài)間隙鎖(Gap Lock)。也就是說(shuō)執(zhí)行 insert 操作的時(shí)候需要依賴(lài) Next-Key Lock(Record Lock+Gap Lock) 進(jìn)行加鎖來(lái)保證不出現(xiàn)幻讀。

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

為了解決以上隔離性引發(fā)的并發(fā)問(wèn)題,數(shù)據(jù)庫(kù)提供了事物的隔離機(jī)制。

read uncommitted(讀未提交): 一個(gè)事務(wù)還沒(méi)提交時(shí),它做的變更就能被別的事務(wù)看到,讀取尚未提交的數(shù)據(jù),哪個(gè)問(wèn)題都不能解決;read committed(讀已提交):一個(gè)事務(wù)提交之后,它做的變更才會(huì)被其他事務(wù)看到,讀取已經(jīng)提交的數(shù)據(jù),可以解決臟讀 ---- oracle默認(rèn)的;repeatable read(可重復(fù)讀):一個(gè)事務(wù)執(zhí)行過(guò)程中看到的數(shù)據(jù),總是跟這個(gè)事務(wù)在啟動(dòng)時(shí)看到的數(shù)據(jù)是一致的,可以解決臟讀和不可重復(fù)讀 —mysql默認(rèn)的;serializable(串行化):顧名思義是對(duì)于同一行記錄,“寫(xiě)”會(huì)加“寫(xiě)鎖”,“讀”會(huì)加“讀鎖”。當(dāng)出現(xiàn)讀寫(xiě)鎖沖突的時(shí)候,后訪問(wèn)的事務(wù)必須等前一個(gè)事務(wù)執(zhí)行完成,才能繼續(xù)執(zhí)行。可以解決臟讀、不可重復(fù)讀和虛讀—相當(dāng)于鎖表。

雖然serializable級(jí)別可以解決所有的數(shù)據(jù)庫(kù)并發(fā)問(wèn)題,但是它會(huì)在讀取的每一行數(shù)據(jù)上都加鎖,這就可能導(dǎo)致大量的超時(shí)和鎖競(jìng)爭(zhēng)問(wèn)題,從而導(dǎo)致效率下降。所以我們?cè)趯?shí)際應(yīng)用中也很少使用serializable,只有在非常需要確保數(shù)據(jù)的一致性而且可以接受沒(méi)有并發(fā)的情況下,才考慮采用該級(jí)別。

MySQL 的隔離級(jí)別是基于鎖實(shí)現(xiàn)的嗎?

MySQL 的隔離級(jí)別基于鎖和 MVCC 機(jī)制共同實(shí)現(xiàn)的。

SERIALIZABLE 隔離級(jí)別是通過(guò)鎖來(lái)實(shí)現(xiàn)的,READ-COMMITTED 和 REPEATABLE-READ 隔離級(jí)別是基于 MVCC 實(shí)現(xiàn)的。不過(guò), SERIALIZABLE 之外的其他隔離級(jí)別可能也需要用到鎖機(jī)制,就比如 REPEATABLE-READ 在當(dāng)前讀情況下需要使用加鎖讀來(lái)保證不會(huì)出現(xiàn)幻讀。

默認(rèn)隔離級(jí)別

MySQL InnoDB 存儲(chǔ)引擎的默認(rèn)支持的隔離級(jí)別是 REPEATABLE-READ(可重復(fù)讀)。我們可以通過(guò) SELECT @@tx_isolation;命令來(lái)查看,MySQL 8.0 該命令改為SELECT @@transaction_isolation;

# 開(kāi)啟一個(gè)事務(wù)START TRANSACTION;# 多條 SQL 語(yǔ)句SQL1,SQL2...## 提交事務(wù)COMMIT;

從上面對(duì) SQL 標(biāo)準(zhǔn)定義了四個(gè)隔離級(jí)別的介紹可以看出,標(biāo)準(zhǔn)的 SQL 隔離級(jí)別定義里,REPEATABLE-READ(可重復(fù)讀)是不可以防止幻讀的。

但是 InnoDB 實(shí)現(xiàn)的 REPEATABLE-READ 隔離級(jí)別其實(shí)是可以解決幻讀問(wèn)題發(fā)生的,主要有下面兩種情況:

快照讀 :由 MVCC 機(jī)制來(lái)保證不出現(xiàn)幻讀。當(dāng)前讀 :使用 Next-Key Lock(臨鍵鎖) 進(jìn)行加鎖來(lái)保證不出現(xiàn)幻讀,Next-Key Lock 是行鎖(Record Lock)和間隙鎖(Gap Lock)的結(jié)合,行鎖只能鎖住已經(jīng)存在的行,為了避免插入新行,需要依賴(lài)間隙鎖。

InnoDB 存儲(chǔ)引擎在分布式事務(wù)的情況下一般會(huì)用到 SERIALIZABLE 隔離級(jí)別。

解決幻讀的方法

解決幻讀的方式有很多,但是它們的核心思想就是一個(gè)事務(wù)在操作某張表數(shù)據(jù)的時(shí)候,另外一個(gè)事務(wù)不允許新增或者刪除這張表中的數(shù)據(jù)了。解決幻讀的方式主要有以下幾種:

將事務(wù)隔離級(jí)別調(diào)整為 SERIALIZABLE 。在可重復(fù)讀的事務(wù)級(jí)別下,給事務(wù)操作的這張表添加表鎖。在可重復(fù)讀的事務(wù)級(jí)別下,給事務(wù)操作的這張表添加 Next-key Lock(Record Lock+Gap Lock)總結(jié)

看到這,你對(duì)事務(wù)是否已經(jīng)有了清晰的認(rèn)識(shí)?接下來(lái)我們就簡(jiǎn)單總結(jié)下今天的知識(shí)點(diǎn):

事務(wù)的概念:一個(gè)事情由n個(gè)單元組成,這n個(gè)單元在執(zhí)行過(guò)程中,要么同時(shí)成功,要么同時(shí)失敗,這就把n個(gè)單元放在了一個(gè)事務(wù)之中。事務(wù)的特性:ACID事務(wù)的操作:開(kāi)啟事務(wù)、提交事務(wù)、回滾事務(wù)事務(wù)的隔離級(jí)別:讀未提交、讀已提交、可重復(fù)讀、串行化解決幻讀的方法:鎖機(jī)制和MVCC機(jī)制

以上就是一文帶你徹底了解MySQL事務(wù)機(jī)制的詳細(xì)內(nèi)容,更多關(guān)于MySQL事務(wù)機(jī)制的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫(kù)
相關(guān)文章:
主站蜘蛛池模板: 微波消解仪器_智能微波消解仪报价_高压微波消解仪厂家_那艾 | 电镀整流器_微弧氧化电源_高频电解电源_微弧氧化设备厂家_深圳开瑞节能 | 石牌坊价格石牌坊雕刻制作_石雕牌坊牌楼石栏杆厂家_山东嘉祥石雕有限公司 | 回收二手冲床_金丰旧冲床回收_协易冲床回收 - 大鑫机械设备 | 不锈钢管件(不锈钢弯头,不锈钢三通,不锈钢大小头),不锈钢法兰「厂家」-浙江志通管阀 | 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | 酒店厨房设计_中央厨房设计_北京商用厨房设计公司-奇能商厨 | 在线钠离子分析仪-硅酸根离子浓度测定仪-油液水分测定仪价格-北京时代新维测控设备有限公司 | 雷冲击高压发生器-水内冷直流高压发生器-串联谐振分压器-武汉特高压电力科技有限公司 | 电力电子产业网 | 海南在线 海南一家| 南京试剂|化学试剂|分析试剂|实验试剂|cas号查询-专业60年试剂销售企业 | 上海租奔驰_上海租商务车_上海租车网-矢昂汽车服务公司 | 气弹簧定制-气动杆-可控气弹簧-不锈钢阻尼器-工业气弹簧-可调节气弹簧厂家-常州巨腾气弹簧供应商 | 空冷器|空气冷却器|空水冷却器-无锡赛迪森机械有限公司[官网] | 【化妆品备案】进口化妆品备案流程-深圳美尚美化妆品有限公司 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 美能达分光测色仪_爱色丽分光测色仪-苏州方特电子科技有限公司 | 飞飞影视_热门电影在线观看_影视大全| 彩超机-黑白B超机-便携兽用B超机-多普勒彩超机价格「大为彩超」厂家 | 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 杭州画室_十大画室_白墙画室_杭州美术培训_国美附中培训_附中考前培训_升学率高的画室_美术中考集训美术高考集训基地 | 消泡剂-水处理消泡剂-涂料消泡剂-切削液消泡剂价格-东莞德丰消泡剂厂家 | IIS7站长之家-站长工具-爱网站请使用IIS7站长综合查询工具,中国站长【WWW.IIS7.COM】 | 翻斗式矿车|固定式矿车|曲轨侧卸式矿车|梭式矿车|矿车配件-山东卓力矿车生产厂家 | 压接机|高精度压接机|手动压接机|昆明可耐特科技有限公司[官网] 胶泥瓷砖胶,轻质粉刷石膏,嵌缝石膏厂家,腻子粉批发,永康家德兴,永康市家德兴建材厂 | 卫生人才网-中国专业的医疗卫生医学人才网招聘网站! | 北京网站建设首页,做网站选【优站网】,专注北京网站建设,北京网站推广,天津网站建设,天津网站推广,小程序,手机APP的开发。 | 小型UV打印机-UV平板打印机-大型uv打印机-UV打印机源头厂家 |松普集团 | 全自动包装秤_全自动上袋机_全自动套袋机_高位码垛机_全自动包装码垛系统生产线-三维汉界机器(山东)股份有限公司 | 北京浩云律师事务所-企业法律顾问_破产清算等公司法律服务 | (中山|佛山|江门)环氧地坪漆,停车场地板漆,车库地板漆,聚氨酯地板漆-中山永旺地坪漆厂家 | 上海刑事律师|刑事辩护律师|专业刑事犯罪辩护律师免费咨询-[尤辰荣]金牌上海刑事律师团队 | 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | 合肥网络推广_合肥SEO网站优化-安徽沃龙First | 欧版反击式破碎机-欧版反击破-矿山石料破碎生产线-青州奥凯诺机械 | 飞利浦LED体育场灯具-吸顶式油站灯-飞利浦LED罩棚灯-佛山嘉耀照明有限公司 | 生物制药洁净车间-GMP车间净化工程-食品净化厂房-杭州波涛净化设备工程有限公司 | 北钻固控设备|石油钻采设备-石油固控设备厂家 | 深圳侦探联系方式_深圳小三调查取证公司_深圳小三分离机构 | 防腐木批发价格_深圳_惠州_东莞防腐木厂家_森源(深圳)防腐木有限公司 |