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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL事务以及加锁机制

發布時間:2024/4/14 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL事务以及加锁机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

事務的特征ACID,即原子性、一致性、隔離性、持久性。

原子性保證一個事務為一個最小的單元,內部不可分割;

一致性保證事務中的每個操作線程不可單獨提交,成功則一起提交,不成功則事務回滾;

隔離性保證不同事務間看到的數據視圖相互獨立,相互隔離(隔離級別可設置);

持久性保證事務提交后數據會持久的保存下來;

sql規范定義的事務的隔離級別:

1.READ UNCOMMITTED(讀取未提交內容)

所有事務可以看到未提交事務的執行結果,本隔離級別很少用到實際應用中,讀取未提交的數據,又稱為“臟讀”。

2.READ COMMITTED(讀取提交內容)

大多數數據庫的默認隔離級別是此級別,但不是mysql默認的。一個事務在開始的時候只能看見已提交事務所做的改變。一個事務從開始到提交前所做的任何改變都是不可見的,除非提交。這種隔離級別也稱為不可重復讀。

3.REPEATABLE READ(可重復讀)

鎖定查詢中使用的所有數據以防止其他用戶更新數據,但是其他用戶可以將新的幻像行插入數據集,且幻像行包括在當前事務的后續讀取中 。此級別也稱為“幻讀”。

4.SERIALIZABLE(可串行化)

可串行化是最高的隔離級別,它通過強制事務排序,使之不可重讀,解決了幻讀的問題。此隔離級別會在每個讀的數據行上加共享鎖,使用這種隔離級別會產生大量的超時現象,一般實際開發中不會用到。

mysql加鎖機制 :

根據類型可分為共享鎖(SHARED LOCK)和排他鎖(EXCLUSIVE LOCK)或者叫讀鎖(READ LOCK)和寫鎖(WRITE LOCK)。

根據粒度劃分又分表鎖和行鎖。表鎖由數據庫服務器實現,行鎖由存儲引擎實現。

mysql提供了3種事務型存儲引擎,InnDB、NDB Cluster和Falcon。

一個事務執行的任何過程中都可以獲得鎖,但是只有事務提交或回滾的時候才釋放這些鎖。這些都是隱式鎖定,也可以顯式鎖定,InnoDB支持顯式鎖定,例如:

SELECT .... LOCK IN SHARE MODE (加共享鎖)

SELECT .....FOR UPDATE(加排他鎖)

多版本并發控制(重要):

Mysql的事務存儲引擎不是簡單實用行加鎖機制,而是叫多版本并發控制(MVCC)技術,和行加鎖機制關聯實用。以便應對更高的并發,當然是以消耗性能作為代價。

每種存儲引擎對MVCC的實現方式不同,InnoDB引擎的簡單實現方式如下:

InnoDB通過為每個數據航增加兩個隱含值的方式來實現。這兩個隱含值記錄了行的創建時間,以及過期時間。每一行存儲事件發生時的系統版本號。每一次開始一個新事務時版本號會自動加1,每個事務都會保存開始時的版本號,每個查詢根據事務的版本號來查詢結果。

  • 本文來自:Linux教程網


轉載于:https://blog.51cto.com/9626185/1603650

總結

以上是生活随笔為你收集整理的MySQL事务以及加锁机制的全部內容,希望文章能夠幫你解決所遇到的問題。

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