最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL事務(wù)的ACID特性以及并發(fā)問(wèn)題方案

 更新時(shí)間:2022年07月14日 14:28:30   作者:菜鳥(niǎo)~~  
這篇文章主要介紹了MySQL事務(wù)的ACID特性以及并發(fā)問(wèn)題方案,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

一、事務(wù)的概念

一個(gè)事務(wù)是由一條或多條對(duì)數(shù)據(jù)庫(kù)操作的SQL語(yǔ)句所組成的一個(gè)不可分割的單元,只有當(dāng)事務(wù)中所有操作都正常執(zhí)行完了,整個(gè)事務(wù)才會(huì)被提交給數(shù)據(jù)庫(kù),如果有部分事務(wù)處理失敗,那么事務(wù)就要回滾到最初的狀態(tài),因此,事務(wù)要么全部執(zhí)行成功,要么全部失敗。

所以要記住事務(wù)幾個(gè)基本概念,如下:

事務(wù)是一組SQL語(yǔ)句的執(zhí)行,要么全部成功,要么全部失敗,不能出現(xiàn)部分成功,部分失敗的結(jié)果,保證事務(wù)執(zhí)行的原子操作。事務(wù)的所有SQL語(yǔ)句全部執(zhí)行成功,才能提交(commit)事務(wù),把結(jié)果寫(xiě)會(huì)磁盤(pán)上。事務(wù)執(zhí)行過(guò)程中,有的SQL出現(xiàn)錯(cuò)誤,那么事務(wù)必須要回滾(rollback)到最初的狀態(tài)。

比如轉(zhuǎn)賬業(yè)務(wù)需要多條SQL語(yǔ)句共同完成,只有這些SQL都執(zhí)行成功才算業(yè)務(wù)成功了。

事務(wù)處理有三個(gè)狀態(tài):

begin:開(kāi)啟一個(gè)事務(wù)要執(zhí)行的全部sql語(yǔ)句都成功了,然后commit提交一個(gè)事務(wù)如果其中任何一條SQL語(yǔ)句由于停電、或者服務(wù)器出錯(cuò),導(dǎo)致SQL執(zhí)行異常,那事務(wù)就沒(méi)有提交,事務(wù)會(huì)回滾(rollback),數(shù)據(jù)將恢復(fù)到事務(wù)開(kāi)始前的狀態(tài)

這是存儲(chǔ)引擎來(lái)保證的(redo log和undo log保證的)

MyISAM存儲(chǔ)引擎不支持事務(wù),InnoDB存儲(chǔ)引擎支持事務(wù)、支持行鎖。

show engines\G查看當(dāng)前數(shù)據(jù)庫(kù)支持哪些存儲(chǔ)引擎。

select @@autocommit;查看對(duì)事務(wù)提交狀態(tài)的設(shè)置

數(shù)據(jù)庫(kù)引擎可以通過(guò)命令臨時(shí)修改,或者通過(guò)配置文件永久修改。

如果說(shuō)我們業(yè)務(wù)上涉及了事務(wù),我們一般會(huì)在代碼上控制這個(gè)變量,一般來(lái)說(shuō),我們的事務(wù)由多條SQL組成,要滿(mǎn)足事務(wù)的原子性操作,所以我們?cè)O(shè)置為手動(dòng)提交。業(yè)務(wù)都成功,則提交這個(gè)事務(wù);如果業(yè)務(wù)中間出現(xiàn)失敗,就回滾1個(gè)事務(wù)。

二、ACID特性

每一個(gè)事務(wù)必須滿(mǎn)足下面的4個(gè)特性:

事務(wù)的原子性(Atomic):事務(wù)是一個(gè)不可分割的整體,事務(wù)必須具有原子特性,及當(dāng)事務(wù)修改時(shí),要么全執(zhí)行,要么全不執(zhí)行,即不允許事務(wù)部分的完成。事務(wù)的一致性(Consistency):一個(gè)事務(wù)執(zhí)行之前和執(zhí)行之后,數(shù)據(jù)庫(kù)數(shù)據(jù)必須保持一致性狀態(tài)。數(shù)據(jù)庫(kù)的一致性狀態(tài)必須由用戶(hù)來(lái)負(fù)責(zé),由并發(fā)控制機(jī)制實(shí)現(xiàn)。就拿網(wǎng)上購(gòu)物來(lái)說(shuō),你只有讓商品出庫(kù),又讓商品進(jìn)入顧客的購(gòu)物車(chē)才能構(gòu)成一個(gè)完整的事務(wù)。(一致性不僅僅體現(xiàn)在事務(wù)里面,包括存儲(chǔ)層引入MySQL為了提高熱點(diǎn)數(shù)據(jù)的訪問(wèn)效率一般都會(huì)加一個(gè)緩存層Redis或者M(jìn)emery cache對(duì)熱點(diǎn)數(shù)據(jù)做緩存,這就涉及了緩存層和數(shù)據(jù)庫(kù)DB層的數(shù)據(jù)一致性問(wèn)題)事務(wù)的隔離性(Isolution):當(dāng)兩個(gè)或多個(gè)事務(wù)并發(fā)執(zhí)行時(shí),為了保證數(shù)據(jù)的安全性,將一個(gè)事務(wù)內(nèi)部的操作與其他事務(wù)的操作隔離起來(lái),不被其他正在執(zhí)行的事務(wù)所看到,使得并發(fā)執(zhí)行的各個(gè)事務(wù)之間不能互相影響。隔離級(jí)別:數(shù)據(jù)的安全性和事務(wù)的并發(fā)性。隔離越嚴(yán)格,安全性越高,并發(fā)性越低(就是并發(fā)控制,保證數(shù)據(jù)安全)事務(wù)的持久性(Durability):事務(wù)完成以后(事務(wù)commit成功),DBMS保證它對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)的修改時(shí)永久性的,即使數(shù)據(jù)庫(kù)因?yàn)楣收铣鲥e(cuò),也應(yīng)該能夠恢復(fù)數(shù)據(jù)。

MySQL最重要的是日志,不是數(shù)據(jù)!

事務(wù)的ACD特性是由MySQL的redo log和undo log機(jī)制來(lái)保證的;I隔離性是由mysql事務(wù)的鎖機(jī)制來(lái)實(shí)現(xiàn)保證的。

三、事務(wù)并發(fā)存在的問(wèn)題

事務(wù)處理不經(jīng)隔離,并發(fā)執(zhí)行事務(wù)時(shí)通常會(huì)發(fā)生以下問(wèn)題:

臟讀(Dirty Read):一個(gè)事務(wù)讀取了另一個(gè)事務(wù)未提交的數(shù)據(jù)。例如當(dāng)事務(wù)A和事務(wù)B并發(fā)執(zhí)行時(shí),當(dāng)事務(wù)A更新后,事務(wù)B查詢(xún)讀取到A尚未提交的數(shù)據(jù),此時(shí)事務(wù)A回滾,則事務(wù)B讀到的數(shù)據(jù)就是無(wú)效的臟數(shù)據(jù)(事務(wù)B讀取了事務(wù)A尚未提交的數(shù)據(jù)不可重復(fù)讀(NonRepeatable Read):一個(gè)事務(wù)的操作導(dǎo)致另一個(gè)事務(wù)前后兩次讀到不同的數(shù)據(jù)。例如當(dāng)事務(wù)A和事務(wù)B并發(fā)執(zhí)行時(shí),當(dāng)事務(wù)B查詢(xún)讀取數(shù)據(jù)后,事務(wù)A更新操作更改事務(wù)B查詢(xún)到的數(shù)據(jù),此時(shí)事務(wù)B再去讀該數(shù)據(jù),發(fā)現(xiàn)前后兩次讀的數(shù)據(jù)不一樣。(事務(wù)B讀取了事務(wù)A已提交的數(shù)據(jù)虛讀(Phantom Read)幻讀:一個(gè)事務(wù)的操作導(dǎo)致另一個(gè)事務(wù)前后兩次查詢(xún)的結(jié)果數(shù)據(jù)量不同。例如當(dāng)事務(wù)A和事務(wù)B并發(fā)執(zhí)行時(shí),當(dāng)事務(wù)B查詢(xún)讀取數(shù)據(jù)后,事務(wù)A新增或者刪除了一條滿(mǎn)足事務(wù)B查詢(xún)條件的記錄,此時(shí)事務(wù)B再去查詢(xún),發(fā)現(xiàn)查詢(xún)到前一次不存在的記錄,或者前一次查詢(xún)的一些記錄不見(jiàn)了。(事務(wù)B讀取了事務(wù)A新增加的數(shù)據(jù)或者讀不到事務(wù)A刪除的數(shù)據(jù)

臟讀必須杜絕,因?yàn)槭聞?wù)沒(méi)有commit。在有些場(chǎng)景下,不可重復(fù)讀和幻讀是可以允許的(事務(wù)已經(jīng)commit),不一定非要杜絕(通過(guò)設(shè)置不同的隔離級(jí)別解決),由應(yīng)用場(chǎng)景需求決定。

四、事務(wù)相關(guān)命令

select @@autocommit;查看MySQL是否自動(dòng)提交事務(wù)

0表示手動(dòng)提交事務(wù),1表示自動(dòng)提交事務(wù),設(shè)置事務(wù)提交方式為手動(dòng)提交(只影響當(dāng)前session):

到此這篇關(guān)于MySQL事務(wù)的ACID特性以及并發(fā)問(wèn)題方案的文章就介紹到這了,更多相關(guān)MySQL事務(wù)ACID特性?xún)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL的左連接、右連接、內(nèi)連接用法解讀

    MySQL的左連接、右連接、內(nèi)連接用法解讀

    這篇文章主要介紹了MySQL的左連接、右連接、內(nèi)連接用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • MySQL?常用引擎總結(jié)分享

    MySQL?常用引擎總結(jié)分享

    這篇文章主要介紹了MySQL?常用引擎總結(jié)分享,MySQL有很多存儲(chǔ)引擎,所謂的存儲(chǔ)引擎是指用于存儲(chǔ)、處理和保護(hù)數(shù)據(jù)的核心服務(wù),更多常用引擎分享,需要的小伙伴可以參考下面文章內(nèi)容
    2022-06-06
  • MySQL存儲(chǔ)過(guò)程的創(chuàng)建和使用示例詳解

    MySQL存儲(chǔ)過(guò)程的創(chuàng)建和使用示例詳解

    文章介紹了MySQL存儲(chǔ)過(guò)程的概念、創(chuàng)建與刪除、調(diào)用、變量使用、參數(shù)、流程控制、管理和案例,存儲(chǔ)過(guò)程可以封裝SQL指令,提高執(zhí)行效率,但也有一定局限性,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • mysql-5.5.28源碼安裝過(guò)程中錯(cuò)誤總結(jié)

    mysql-5.5.28源碼安裝過(guò)程中錯(cuò)誤總結(jié)

    介紹一下關(guān)于mysql-5.5.28源碼安裝過(guò)程中幾大錯(cuò)誤總結(jié),希望此文章對(duì)各位同學(xué)有所幫助。
    2013-10-10
  • MySQL數(shù)據(jù)庫(kù)自增主鍵的間隔不為1的解決方式

    MySQL數(shù)據(jù)庫(kù)自增主鍵的間隔不為1的解決方式

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)自增主鍵的間隔不為1的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • MySQL數(shù)據(jù)庫(kù)誤操作后快速回滾的方法

    MySQL數(shù)據(jù)庫(kù)誤操作后快速回滾的方法

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)誤操作后快速回滾的方法的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • mysql 復(fù)制過(guò)濾重復(fù)如何解決

    mysql 復(fù)制過(guò)濾重復(fù)如何解決

    在進(jìn)行mysql復(fù)制過(guò)程中,會(huì)出現(xiàn)數(shù)據(jù)重復(fù)的現(xiàn)象,怎樣利用mysql 過(guò)濾重復(fù)的數(shù)據(jù)呢?本文將提供詳細(xì)的解決方法,需要了解的朋友可以參考下
    2012-11-11
  • 解決net start mysql--服務(wù)無(wú)法啟動(dòng) 服務(wù)沒(méi)有報(bào)告任何錯(cuò)誤問(wèn)題

    解決net start mysql--服務(wù)無(wú)法啟動(dòng) 服務(wù)沒(méi)有報(bào)告任何錯(cuò)誤問(wèn)題

    這篇文章主要介紹了解決net start mysql--服務(wù)無(wú)法啟動(dòng) 服務(wù)沒(méi)有報(bào)告任何錯(cuò)誤問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 詳解MySQL主鍵唯一鍵重復(fù)插入解決方法

    詳解MySQL主鍵唯一鍵重復(fù)插入解決方法

    我們插入數(shù)據(jù)的時(shí)候,有可能碰到重復(fù)數(shù)據(jù)插入的問(wèn)題,那么MySQL主鍵唯一鍵重復(fù)插入如何解決,本文就詳細(xì)的來(lái)介紹一下,感興趣的可以了解一下
    2021-09-09
  • Mysql中LIMIT語(yǔ)句的具體使用

    Mysql中LIMIT語(yǔ)句的具體使用

    本文主要介紹了Mysql中LIMIT語(yǔ)句的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06

最新評(píng)論

花莲县| 天柱县| 定襄县| 承德县| 收藏| 科技| 隆子县| 攀枝花市| 郓城县| 天津市| 湘潭县| 镇沅| 嘉禾县| 福清市| 太仆寺旗| 金堂县| 乌兰察布市| 临城县| 河池市| 伊宁县| 南召县| 都兰县| 白山市| 敦化市| 都昌县| 靖西县| 巫溪县| 承德市| 石景山区| 伊金霍洛旗| 万载县| 汉阴县| 南皮县| 临泉县| 瑞安市| 漠河县| 山东省| 北碚区| 宜丰县| 南京市| 明溪县|