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

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

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

一、事務的概念

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

所以要記住事務幾個基本概念,如下:

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

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

事務處理有三個狀態(tài):

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

這是存儲引擎來保證的(redo log和undo log保證的)

MyISAM存儲引擎不支持事務,InnoDB存儲引擎支持事務、支持行鎖。

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

select @@autocommit;查看對事務提交狀態(tài)的設置

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

如果說我們業(yè)務上涉及了事務,我們一般會在代碼上控制這個變量,一般來說,我們的事務由多條SQL組成,要滿足事務的原子性操作,所以我們設置為手動提交。業(yè)務都成功,則提交這個事務;如果業(yè)務中間出現(xiàn)失敗,就回滾1個事務。

二、ACID特性

每一個事務必須滿足下面的4個特性:

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

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

事務的ACD特性是由MySQL的redo log和undo log機制來保證的;I隔離性是由mysql事務的鎖機制來實現(xiàn)保證的。

三、事務并發(fā)存在的問題

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

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

臟讀必須杜絕,因為事務沒有commit。在有些場景下,不可重復讀和幻讀是可以允許的(事務已經(jīng)commit),不一定非要杜絕(通過設置不同的隔離級別解決),由應用場景需求決定。

四、事務相關命令

select @@autocommit;查看MySQL是否自動提交事務

0表示手動提交事務,1表示自動提交事務,設置事務提交方式為手動提交(只影響當前session):

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

相關文章

  • MySQL的左連接、右連接、內連接用法解讀

    MySQL的左連接、右連接、內連接用法解讀

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

    MySQL?常用引擎總結分享

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

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

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

    mysql-5.5.28源碼安裝過程中錯誤總結

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

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

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

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

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

    mysql 復制過濾重復如何解決

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

    解決net start mysql--服務無法啟動 服務沒有報告任何錯誤問題

    這篇文章主要介紹了解決net start mysql--服務無法啟動 服務沒有報告任何錯誤問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 詳解MySQL主鍵唯一鍵重復插入解決方法

    詳解MySQL主鍵唯一鍵重復插入解決方法

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

    Mysql中LIMIT語句的具體使用

    本文主要介紹了Mysql中LIMIT語句的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06

最新評論

香格里拉县| 昌平区| 准格尔旗| 桂平市| 延川县| 庄河市| 江门市| 富宁县| 雅安市| 泰兴市| 静海县| 鄂伦春自治旗| 临漳县| 富蕴县| 西充县| 容城县| 广饶县| 峨眉山市| 土默特左旗| 怀宁县| 安远县| 巴塘县| 永昌县| 汨罗市| 泰宁县| 思南县| 乳源| 新泰市| 正阳县| 高密市| 锦州市| 武城县| 商河县| 岗巴县| 山东省| 浦江县| 攀枝花市| 东光县| 阜城县| 麻栗坡县| 万山特区|