av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

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

MySQL事務(wù)與隔離級別的使用基礎(chǔ)理論

瀏覽:4日期:2023-02-18 16:43:47
目錄
  • 什么是事務(wù)
  • 事務(wù)四大特性ACID
  • 并發(fā)事務(wù)問題
    • 臟讀
    • 不可重復讀
    • 幻讀
  • 事務(wù)隔離級別

    什么是事務(wù)

    事務(wù)就是一組操作的集合,事務(wù)將整組操作作為一個整體,共同提交或者共同撤銷

    這些操作只能同時成功或者同時失敗,成功即可提交事務(wù),失敗就執(zhí)行事務(wù)回滾

    MySQL的事務(wù)默認是自動提交的,一條語句執(zhí)行成功,MySQL將會隱式的提交事務(wù)

    以轉(zhuǎn)賬為例,張三向李四轉(zhuǎn)賬1000元

    這個整體行為包含三個操作:首先查詢張三賬戶的余額,其次將張三賬戶余額-1000,最后將李四賬戶余額+1000。事務(wù)就是將這三個操作看作最小提交單元,就是一榮俱榮一損俱損。

    -- 查看事務(wù)管理狀態(tài)  1-自動  0-手動select @@autocommit;-- 設(shè)置事務(wù)手動管理set @@autocommit = 0;-- 開啟事務(wù)start transaction;-- 開啟事務(wù):start transaction 或者 beginselect money from account where name = "張三";update account set money = money - 1000 where name = "張三";update account set money = money + 1000 where name = "李四";-- 事務(wù)提交commit;-- 事務(wù)回滾rollback;

    事務(wù)四大特性ACID

    原子性Atomicity:一組操作為最小執(zhí)行單元,只能全部執(zhí)行成功或者全部失敗

    一致性Consistency:事務(wù)完成后,所有數(shù)據(jù)都要保持一致狀態(tài)

    一致性表示事務(wù)完成后,數(shù)據(jù)操作前后符合邏輯運算,狀態(tài)一致

    隔離性Isolation:是指在并發(fā)操作數(shù)據(jù)庫時,各個事務(wù)之間不會相互影響

    持久性Durability:事務(wù)一旦提交或回滾,對于數(shù)據(jù)庫的修改將會永久保存

    并發(fā)事務(wù)問題

    臟讀

    兩個事務(wù)A和B在并發(fā)下操作數(shù)據(jù)庫中的同一數(shù)據(jù)時,當事務(wù)A對數(shù)據(jù)進行了修改但是還沒有commit的同時,事務(wù)B對該數(shù)據(jù)進行了select,此時事務(wù)B讀取到的數(shù)據(jù)就是不準確的。這種情況叫做臟讀

    事務(wù)B讀取到了事務(wù)A修改但還未提交的數(shù)據(jù)---->臟讀

    不可重復讀

    同樣事務(wù)AB并發(fā)下操作數(shù)據(jù)庫中同一數(shù)據(jù),首先事務(wù)A對該數(shù)據(jù)進行查詢,查詢之后又進行了其他操作。與此同時,事務(wù)B執(zhí)行了更新操作并且成功commit。那么當事務(wù)A再次對數(shù)據(jù)庫查詢的時候就會出現(xiàn)與上次讀取到的數(shù)據(jù)不一致的情況

    幻讀

    事務(wù)AB并發(fā)下操作數(shù)據(jù)庫中同一數(shù)據(jù),事務(wù)A首先查詢了數(shù)據(jù)庫中是否有id=1的數(shù)據(jù),沒有就插入。那么此時事務(wù)A未查詢到該數(shù)據(jù)存在,同時事務(wù)B執(zhí)行了插入操作插入了id=1的數(shù)據(jù)并且提交。那么事務(wù)A再去插入的時候則會報主鍵沖突的錯誤,但是當事務(wù)A再一次去查的時候發(fā)現(xiàn)id=1的數(shù)據(jù)仍然是不存在( 前提是已經(jīng)解決了不可重復讀的問題,一個事務(wù)多次訪問同一數(shù)據(jù)的結(jié)果是一致的 ),這種情況就稱之為幻讀

    事務(wù)隔離級別

    隔離級別

    隔離級別臟讀不可重復讀幻讀Read uncommitted(讀未提交)×××Read committed(oracle默認)(讀已提交)√××Repeatable Read(mysql默認)(可重復讀)√√×Serializable(可序化)√√√

    × --> 無法解決 √ --> 可以解決

    在sql中查看當前事務(wù)隔離級別

    select @@transaction_isolation;

    設(shè)置當前事務(wù)隔離級別

    -- 設(shè)置事務(wù)隔離級別set [session|global] transaction isolation level {Read uncommitted | Read committed | Repeatable Read |Serializable};

    session是指盡在當前會話中使用該事務(wù)隔離級別,global表示全局有效

    四種事務(wù)隔離級別當中,Serializable可序化級別最高。要求序列化執(zhí)行sql指令,事務(wù)只能一個接一個的執(zhí)行,不允許并發(fā)執(zhí)行。性能低下

    而Read Uncommitted讀未提交性能最好,但是存在臟讀問題等

    到此這篇關(guān)于MySQL事務(wù)與隔離級別的使用基礎(chǔ)理論的文章就介紹到這了,更多相關(guān)MySQL事務(wù)與隔離級別內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

    標簽: MySQL
    相關(guān)文章:
    主站蜘蛛池模板: 国产一区2区 | 91中文字幕在线观看 | 欧美在线播放一区 | 国产香蕉视频在线播放 | 精品免费国产一区二区三区四区介绍 | 97久久精品午夜一区二区 | 精品在线免费观看视频 | 日韩av免费在线观看 | 亚洲综合一区二区三区 | 国产精品1区2区 | 国产精品美女久久久久久久网站 | 精品久久久久久久久久 | 午夜三区 | 日韩免费av网站 | 在线一区视频 | 国偷自产av一区二区三区 | 成人免费共享视频 | 久久久无码精品亚洲日韩按摩 | 精品96久久久久久中文字幕无 | 亚洲精品欧美 | 亚洲精品视频免费观看 | 精品国产乱码久久久久久影片 | 精品国产乱码久久久久久影片 | 中文字幕三区 | 毛片a级| 日韩av一区二区在线观看 | 欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放 | 久久国产视频网站 | 天天操天天拍 | 久久久久久久久久久一区二区 | 亚洲精品91| 91免费小视频 | 色久伊人 | 亚洲综合国产 | 日批日韩在线观看 | 五月婷婷 六月丁香 | 99reav| 噜噜噜噜狠狠狠7777视频 | 国产日韩欧美一区二区 | 日韩在线中文字幕 | 精品久久精品 |