mysql 預設事務隔離等級
由圖可見,mysql 預設是使用 rr 的隔離方式執行的
我們建立了乙個表用於測試,並插入了5條測試資料:
read uncommitted
首先我們將當前 session 的隔離級別設定為 read uncommitted,並開啟乙個新的事務,然後執行一次查詢,可以看到查詢到了原始的資料
這時,我們開啟乙個新的終端,同樣開啟乙個新的事務,並執行一條 update 語句更新資料
接下來,我們切換到原來的終端,重新執行查詢:
我們發現資料發生了變化,然而執行 update 語句的終端並沒有提交事務,我們看到出現了髒堵現象
read committed
與上面一樣,我們首先將當前 session 的隔離級別設定為 read committed,然後開啟乙個新事務,並執行一次查詢,可以看到查詢到了原始資料
然後,在另乙個終端中,我們同樣開啟乙個新事務並執行一條 update 語句更新資料
在更新事務尚未提交時,我們回到開始的終端,重新執行查詢
可以看到,髒讀問題已經不存在了
那麼,接下來,我們在提交另乙個終端中的更新事務,並回到開始的終端中重新執行查詢:
我們看到,開始的終端裡查詢到的資料發生了變化,出現了不可重複讀的問題
同時我們在另一終端中開啟新的事務,插入一條資料並提交事務,然後我們再在原來的終端中查詢資料
我們看到,原來的終端的查詢結果看到了新增的資料,出現了幻讀問題
repeatable read
同樣的,我們切換到 repeatable read 隔離方式,然後查詢原始資料:
此時,我們在另乙個終端中執行插入並提交:
然後回到開始的終端查詢:
可以看到,幻讀的問題已經被解決了
serializable
序列化的隔離方式會明顯降低事務的處理效率,因此不建議使用,由於他保證事務的嚴格傳行執行,所以可以保證上述問題的避免,這裡我們不做實踐了
mysql鎖的級別 mysql 鎖和各鎖級別
共享鎖 行級別 查 共享鎖的代號是s,是share的縮寫,共享鎖的鎖粒度是行或者元組 多個行 乙個事務獲取了共享鎖之後,可以對鎖定範圍內的資料執行讀操作。排它鎖 行級別 增刪改 排它鎖的代號是x,是exclusive的縮寫,排它鎖的粒度與共享鎖相同,也是行或者元組。乙個事務獲取了排它鎖之後,可以對鎖...
Mysql 鎖 隔離級別
1.共享鎖 只要有乙個人 事務或執行緒 在查詢,其他人就都不能改,要照顧少數 下面是將所有性別是男的資料都加上共享鎖 select from table where 男 lock in share mode2.排他鎖 只要有乙個人 事務或執行緒 在用 增刪改差 其他人就不能用 下面是將所有性別是男的...
mysql 鎖,隔離級別
1.鎖是對多執行緒,多程序訪問同一資源進行協調的機制 2.分為行鎖,表鎖,頁鎖。myisam和memory支援表鎖,bdb引擎支援表鎖,頁鎖。innodb支援表鎖,行鎖 預設 3.myisam表鎖 4.myisam併發插入 5.讀寫操作同時爭搶鎖,寫鎖優先,可以設定寫鎖優先順序降低,low prio...