vue+MySQL,Mysql-MVCC

 2023-10-15 阅读 30 评论 0

摘要:本文使用navcat演示mvcc機制 示例1:先創建一個表,如下圖,有id和name兩個字段 然后使用navcat打開兩個會話窗口,這兩個窗口分別作為兩個事務,如下圖 vue+MySQL,執行如下步驟 1.用鼠標選中圖二的第1行,點擊“運行已選擇的” 2.在圖一

本文使用navcat演示mvcc機制

示例1:先創建一個表,如下圖,有id和name兩個字段
在這里插入圖片描述

然后使用navcat打開兩個會話窗口,這兩個窗口分別作為兩個事務,如下圖
在這里插入圖片描述

vue+MySQL,執行如下步驟
1.用鼠標選中圖二的第1行,點擊“運行已選擇的”
2.在圖一中點擊“運行”,查詢結果為數據庫中正常數據
3.用鼠標選中圖二的第2行,點擊“運行已選擇的”,此時提示修改1行數據
4.在圖一中點擊“運行”,查詢結果為數據庫中正常數據(發現圖一數據并沒有更新過來)
5.用鼠標選中圖二的第3行,點擊“運行已選擇的”
6.在圖一中點擊“運行”,發現查詢結果已被圖二更新
通過上述6步很明顯的發現:一個事務如果沒提交,數據不會被更新到數據庫中(雖然我知道這是廢話,但是我想演示通過navcat如何做到兩個事務的測試)

示例2:下面繼續測試
在這里插入圖片描述
如下步驟操作:
1.鼠標選中圖二的1和2行(選中兩行),點擊運行
2.在圖一中點擊“運行”,此時發現左上角一直提示“正在處理”,且“停止”按鈕一直亮著,說明圖一的sql語句一直等待,其實是在等待圖二的事務執行完畢,因為圖二并沒有執行COMMIT語句,所以圖二事務一直沒有完畢,此時,其他會話不能操作id=1的這條數據
3.鼠標選中圖二的第3行,點擊運行,此時事務執行完畢,圖一的sql也執行完畢,刷新表中數據,會發現表中的數據是圖一的內容“糧糧33”,很好理解,因為圖二執行完畢之后,圖一再執行的

通過上述3步很明顯的發現:對同一條數據操作,一個事務沒執行完畢,其他會話的操作會阻塞等待(當然了,會有超時時間,挺長的)

示例3:
首先將數據庫內容恢復成初始的樣子,如下
在這里插入圖片描述
接下來準備兩個會話sql,如下
在這里插入圖片描述
執行如下步驟:
1.選中圖二1和2行(選中兩行),點擊“運行已選擇的”
2.選中圖二的第3行,點擊“運行已選擇的”,發現數據為糧糧11
3.選中圖一的sql,執行,發現數據依然為糧糧1
其實測試3與測試1是相同的,接下來對測試3增加一些復雜度,如示例4

MySQL nvl?示例4:
首先將數據庫內容恢復成初始的樣子,如下
在這里插入圖片描述
接下來準備兩個會話sql,如下
在這里插入圖片描述
執行如下步驟:
1.執行圖二的前3條sql(不要執行第4條),發現執行結果顯示糧糧11
2.執行圖一的前3條sql(不要執行第4條),發現執行結果顯示糧糧22
3.回頭刷新表,發現依然是糧糧1,刷新按鈕如下圖
在這里插入圖片描述
有上述3步我們發現:
各自的事務,似乎自己都有一個主數據的副本,修改的時候,修改的是自己副本的數據,而不影響其他事務的數據,當該事務修改完畢并且還沒有提交的時候,此時查詢數據,發現數據符合預期,是剛修改過的數據,而其他數據查詢的時候,同樣符合預期,是沒修改過的數據,因為是多個事務,涉及到并發問題,那么這種正確的,符合預期的行為,Mysql是如何做到的呢?Mysql采用一個叫MVCC的機制,其實通過上述內容,我們大概能才出來,是通過副本機制(自己改自己的),下面具體闡述MVCC

未完待續

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/136879.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息