MySQL事務以及加鎖機制

來源:互聯網
上載者:User

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,每個事務都會儲存開始時的版本號碼,每個查詢根據事務的版本號碼來查詢結果。

--------------------------------------分割線 --------------------------------------

Ubuntu 14.04下安裝MySQL

《MySQL權威指南(原書第2版)》清晰中文掃描版 PDF

Ubuntu 14.04 LTS 安裝 LNMP Nginx\PHP5 (PHP-FPM)\MySQL

Ubuntu 14.04下搭建MySQL主從伺服器

Ubuntu 12.04 LTS 構建高可用分布式 MySQL 叢集

Ubuntu 12.04下原始碼安裝MySQL5.6以及Python-MySQLdb

MySQL-5.5.38通用二進位安裝

--------------------------------------分割線 --------------------------------------

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.