mysql 终端模拟_mysql客户端模拟脏读、幻读和可重复读
如果操作一下時報出錯誤:在數據庫中執行 SET GLOBAL BINLOG_FORMAT = mixed;
執行后可通過SELECT * FROM information_schema.GLOBAL_VARIABLES WHERE VARIABLE_NAME = ‘BINLOG_FORMAT’ ;進行查看。
通過客戶端選擇可用數據庫:use db_test(模擬數據庫)
以下由客戶端進行模擬:
1.臟讀(read uncommitted):在兩個事務中,一個事務讀到了另一個事務未提交的數據(即事務A讀取到事務B修改數據,當事務B未提交數據到數據庫或出錯時,事務A再進行讀取發現數據已修改。例如:將對象放入緩存未同步到數據庫,讀取數據從緩存中進行讀取).
在兩個客戶端分別執行
然后執行select @@session.tx_isolation;進行查看
分別開啟事務
從上圖可以清晰看到,客戶端1讀取到了客戶端2未提交的數據
2.幻讀(READ COMMIT):一個事務讀取到另一個事務提交的數據(主要表現為某行數據修改–即事務A在操作前先對數據進行讀取,事務B對某行數據進行修改,事務A再次讀取數據發現數據已不一致)
設置數據庫為READ COMMIT級別
然后像上面一樣打開事務,執行語句
可以清楚的看到客戶端1讀到了客戶端2事務完成后提交的數據
3.可重復讀(REPEATABLE READ):在事務提交前讀取到的值始終為同一個,但是如果表中出現數據的增加和刪除則讀取的結果可能會有偏差(例如:事務A統計大于某行大于100數據,第一次統計為10個,此時事務B向表中插入數據,再次進行統計發現已經不是10個)
然后開啟事務,編寫sql語句
可以清晰看到客戶端1在事務內始終查詢到是相同的值
'綜上所述:
幻讀(READ COMMIT)主要表現為同一張表中某行數據的修改操作;可重復讀(REPEATAbLE READ)主要表現為同一張表中數據的添加和刪除操作
總結
以上是生活随笔為你收集整理的mysql 终端模拟_mysql客户端模拟脏读、幻读和可重复读的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哪个html标签用于定义文档的标题,在H
- 下一篇: html5 canvas裁剪图片,htm