MySQL之並發控制和事務

來源:互聯網
上載者:User

標籤:顯示   nsa   重複   .com   髒讀   資料不一致   不一致   unlock   分享   

並發控制

鎖粒度:

表級鎖

行級鎖

鎖:

讀鎖:共用鎖定,唯讀不可寫,多個讀互不阻塞,

寫鎖:獨佔鎖,排它鎖,一個寫鎖會阻塞其它讀和寫鎖

實現

儲存引擎:自行實現其鎖策略和鎖粒度

伺服器級:實現了鎖,表級鎖;使用者可顯式請求

分類:

隱式鎖:由儲存引擎自動施加鎖

顯式鎖:使用者手動請求

 

鎖策略:在鎖粒度及資料安全性尋求的平衡機制

顯示使用鎖

LOCK TABLES

tbl_name [[AS] alias] lock_type

[, tbl_name [[AS] alias] lock_type] ...

lock_type: READ , WRITE

UNLOCK TABLES 解鎖

FLUSH TABLES tb_name[,...] [WITH READ LOCK]

關閉正在開啟的表(清除查詢快取),通常在備份前加全域讀鎖

SELECT clause [FOR UPDATE | LOCK IN SHARE MODE]

查詢時加寫或讀鎖

 

事務

事務Transactions:一組原子性的SQL語句,或一個獨立工作單元

交易記錄:記錄事務資訊,實現undo,redo等故障恢複功能

ACID特性:

A:atomicity原子性;整個事務中的所有操作要麼全部成功執行,要麼全部失敗後復原

C:consistency一致性;資料庫總是從一個一致性狀態轉換為另一個一致性狀態

I:Isolation隔離性;一個事務所做出的操作在提交之前,是不能為其它事務所見;隔離有多種隔離等級,實現並發

D:durability持久性;一旦事務提交,其所做的修改會永久儲存於資料庫中


例:A給B轉賬,不能A扣錢了而B不漲錢

 

Transaction生命週期

增刪改才算事務,查詢select不算在事務內

 

事務

啟動事務:START TRANSACTION

結束事務:

(1) COMMIT:提交

(2) ROLLBACK: 復原

注意:只有事務型儲存引擎方能支援此類操作

建議:顯式請求和提交事務,而不要使用“自動認可”功能

set [global] autocommit={1|0}

預設為1自動認可,如果想永久儲存的話要寫到設定檔中,autocommit=0

事務支援儲存點:savepoint

SAVEPOINT identifier

ROLLBACK [WORK] TO [SAVEPOINT] identifier

RELEASE SAVEPOINT identifier

 

交易隔離等級

交易隔離等級:從上至下更加嚴格

?READ UNCOMMITTED 可讀取到未提交資料,產生髒讀

?READ COMMITTED 可讀提交資料,但未提交資料不可讀,產生不可重複讀取,即可讀取到多個提交資料,導致每次讀取資料不一致

?REPEATABLE READ 可重複讀,多次讀取資料都一致,產生幻讀,即讀取過程中,即使有其它提交的事務修改資料,仍只能讀取到未修改前的舊資料。此為MySQL預設設定

?SERIALIZABILE 可序列化,未提交的讀事務阻塞修改事務,或者未提交的修改事務阻塞讀事務。導致並發效能差

MVCC: 多版本並發控制,和事務層級相關

 

交易隔離等級

 

指定交易隔離等級:

伺服器變數tx_isolation指定,預設為REPEATABLE-READ,可在GLOBAL和SESSION級進行設定

SET tx_isolation=''

READ-UNCOMMITTED

READ-COMMITTED

REPEATABLE-READ

SERIALIZABLE

伺服器選項中指定

vim /etc/my.cnf

[mysqld]

transaction-isolation=SERIALIZABLE 註:配置名跟變數名不一樣

 

事務的並發控制

死結:

兩個或多個事務在同一資源相互佔用,並請求鎖定對方佔用的資源的狀態

例:事務tr1鎖定table1 row1,然後事務transaction2鎖定table2 row2,兩者互不干擾,但如果此時tr1嘗試修改table2 row2則會卡住,此時如果tr2再嘗試修改table1 row1,則tr1和tr2都會卡住,發生死結

MySQL會自動檢測死結,並犧牲其中的一個事務以解開死結,通常是犧牲等待時間不長的那個

交易記錄:

交易記錄的寫入類型為“追加”,因此其操作為“順序IO”;通常也被稱為:預寫式日誌 write ahead logging

記錄檔: ib_logfile0, ib_logfile1

 

MySQL之並發控制和事務

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.