日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

mysql 事务隔离规范_MySQL事务隔离级别以及脏读、幻读、不可重复读示例

發布時間:2023/11/27 生活经验 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 事务隔离规范_MySQL事务隔离级别以及脏读、幻读、不可重复读示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

事務的隔離性

MySQL是一個客戶端/服務器架構的軟件,對于同一個服務器來說,可以有若干個客戶端與之連接,每個客戶端與服務器連接上之后,就可以稱之為一個會話(Session)。每個客戶端都可以在自己的會話中向服務器發出請求語句,一個請求語句可能是某個事務的一部分,也就是對于服務器來說可能同時處理多個事務。當數據庫上有多個事務同時執行的時候,就可能出現臟讀(Dirty Read)、不可重復讀(Non-Repeatable Read)、幻讀(Phantom Read)的問題,為了解決這些問題,就有了 “隔離級別” 的概念。

理論上在某個事務對某個數據進行訪問時,其他事務應該進行排隊,當該事務提交之后,其他事務才可以繼續訪問這個數據。但一般情況下隔離得越嚴實,效率就會越低。因此很多時候,我們都要在隔離性和效率二者之間尋找一個平衡點。

事務并發執行遇到的問題

臟讀(Dirty Read): 臟讀是指一個事務讀到了另一個未提交事務修改過的數據。

如小王的賬戶中有100的余額,接下來有兩個事務對小王的賬戶進行訪問。

如上,會話A和會話B各開啟了一個事務,會話A先給小王賬戶余額加了50,此時賬戶B查詢小王賬戶余額為150,接下來會話A進行了回滾,那會話B查詢到的150就成一個不正確的臟數據。

不可重復讀(Non-Repeatable Read): 不可重復讀是指在同一個事務內多次讀取同一數據集合,但查到的結果卻不相同。發生不可重復讀的原因是在多次搜索期間查詢的數據被其它事務修改了。

看如下的兩個會話請求。

在會話A的同一個事務中,兩次相同查詢的結果不同,意味著發生了不可重復讀。

幻讀(Phantom Read): 所謂幻讀,指的是當某個事務在讀取某個范圍內的記錄時,另外一個事務又在該范圍內插入了新的記錄,當之前的事務再次讀取該范圍的記錄時,會讀取到之前沒有讀到的數據。

假如賬戶表中目前只有小王的余額為100,再看下如下的兩個會話請求。

會話A事務中的第二次查詢,查到了第一次查詢沒有查到的 name ‘小張’,這就意味著出現了幻讀。

SQL標準制定的四種隔離級別

ISO 和 ANIS SQL 標準制定了四種事務隔離級別的標準,分別為:讀未提交(read uncommitted)、讀提交(read committed)、可重復讀(repeatable read)和串行化(serializable )。

我們先來看下這四種隔離級別的意思。讀未提交: 一個事務還沒提交時,它做的變更就能被別的事務看到。

讀提交: 一個事務提交之后,它做的變更才會被其他事務看到。

可重復讀: 一個事務執行過程中看到的數據,總是跟這個事務在啟動時看到的數據是一致的。當然在可重復讀隔離級別下,未提交的變更對其他事務也是不可見的。

串行化: 顧名思義是對于同一行記錄,“寫”會加“寫鎖”,“讀”會加“讀鎖”。當出現讀寫鎖沖突的時候,后訪問的事務必須等前一個事務執行完成,才能繼續執行。

SQL 標準中規定,針對不同的隔離級別,并發事務可以發生不同嚴重程度的問題,具體情況如下:

( √ 表示可以發生;× 表示不可以發生)

MySQL對四種隔離級別的支持情況

雖然 ISO 和 ANIS SQL 標準制定了四種事務隔離級別的標準,但不是所有數據庫廠商都遵循這些標準,比如 Oracle 數據庫就不支持讀未提交(read uncommitted)和可重復讀(repeatable read)的事務隔離級別。

MySQL InnoDB 存儲引擎支持4種隔離級別,但與 SQL 標準中定義的不同的是,InnoDB 存儲引擎在默認的可重復讀(repeatable read)事務隔離級別下,使用 Next-Key Lock 鎖的算法,避免了幻讀的產生。也就是說 InnoDB 存儲引擎在可重復讀(repeatable read)的事務隔離級別下,已經可以完全保證事務的隔離性要求,即達到了 SQL 標準中的串行化(serializable )隔離級別的要求。

如何設置事務的隔離級別

在 InnoDB 存儲引擎中,可以使用以下命令來設置全局或者當前會話的事務隔離級別:

SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL

{

READ UNCOMMITTED

| READ COMMITTED

| REPEATABLE READ

| SERIALIZABLE

}

如想設置當前會話的隔離級別為讀提交,可以使用如下語句:

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

如果想在 MySQL 數據庫啟動時就設置事務的默認隔離級別,那就需要修改配置文件中 transaction-isolation 的值,比方說,我們在啟動前指定了 transaction-isolation = READ COMMITTED,那么事務的默認隔離級別就從原來的 REPEATABLE READ 變成了READ COMMITTED。

查看當前會話的事務隔離級別,可以用如下語句:

SELECT @@transaction_isolation;

查看全局的事務隔離級別,可以使用如下語句:

SELECT @@global.transaction_isolation;

注意:transaction_isolation 是在 MySQL 5.7.20 的版本中引入來替換tx_isolation的,如果你使用的是之前版本的 MySQL,請將上述用到的 transaction_isolation 的地方替換為 tx_isolation 。

總結

以上是生活随笔為你收集整理的mysql 事务隔离规范_MySQL事务隔离级别以及脏读、幻读、不可重复读示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久一区二区三区四区五区 | 欧美日一区二区三区 | 国产精品乱码一区二区 | 日韩成人性视频 | 国产福利一区二区三区在线观看 | 欧美久久99| 操极品少妇 | 老妇女性较大毛片 | 欧美裸体xxxx | av日韩在线免费观看 | av一级免费| 黄色短视频在线观看 | 天堂草在线观看 | 黄色片久久久 | 国产精品网站视频 | 欧美极品一区 | 91资源在线播放 | 日日狠狠久久 | 一区二区中文 | 日本精品一区二区三区四区 | 婷婷色婷婷开心五月四房播播 | 欧美视频免费 | 日韩视频免费观看高清完整版 | 欧美日韩免费做爰视频 | 韩国伦理在线 | 狐狸视频污| 亚洲av无码一区二区三区在线观看 | 亚洲AV无码成人国产精品色 | 性欧美video另类hd尤物 | 国产一二 | 999视频在线播放 | 国自产拍偷拍精品啪啪一区二区 | 国产1区2区3区中文字幕 | 91l九色lporny| 一区二区三区xxx | 亚洲激情视频在线播放 | 91视频中文字幕 | 国产精品视频一区二区三区不卡 | 一区二区三区在线观看免费 | 成人人人人人欧美片做爰 | 色噜噜网站 | 欧美日韩一区二区三 | 日韩和欧美的一区二区 | 推特裸体gay猛交gay | 伊人91在线 | 国产精品无码中文 | 免费看片视频 | 国产精品成人网站 | 青草91 | 久久大胆人体 | 青青草在线播放 | 91成人福利在线 | 国产成人二区 | 麻豆精品国产 | 国产日日夜夜 | 99操| a国产视频| 欧美性猛交7777777 | 日本无遮羞调教打屁股网站 | 4438x亚洲最大| 高潮videossex高潮 | 欧美日韩在线播放三区四区 | 射射色 | 男人天堂va | 亚洲视频网 | 人人九九精 | 成人黄色电影在线 | 91吃瓜今日吃瓜入口 | 久久久91精品国产一区二区三区 | 欧美黑人精品 | 一区二区乱码 | 亚洲国产图片 | 狠狠天堂| 久久理论视频 | 国产区欧美区日韩区 | 少女与动物高清版在线观看 | 亚洲最大在线视频 | 久久77777| 在线免费观看黄视频 | 日本成人三级电影 | 日韩高清二区 | 毛片资源| 一级特黄性色生活片 | 一区二区三区精彩视频 | 成人a网站 | av毛片大全 | aise爱色av | 人人干人人舔 | 国产精品嫩草影院精东 | 亚洲精品国产一区二区 | 日韩av在线一区二区 | 性久久久久久久久久久久 | 在线视频网 | 亚洲欧美一区二区在线观看 | 黄色片欧美 | 亚洲欧美日韩在线播放 | 中国女人内谢69xxxxⅹ视频 | 日日日网站 | 福利一区福利二区 |