1. 程式人生 > >MySQL技術內幕 InnoDB儲存引擎:一致性鎖定讀

MySQL技術內幕 InnoDB儲存引擎:一致性鎖定讀

在前一小節中講到,在預設配置下,即事務的隔離級別為 REPEATABLE READ 模式下, InnoDB 儲存引擎的 SELECT 操作使用一致性非鎖定讀。但是在某些情況下,使用者需要顯式地對資料庫讀取操作進行加鎖以保證資料邏輯的一致性。而這要求資料庫支援加鎖語句,即使是對於SELECT的只讀操作。InnoDB儲存引擎對於SELECT語句支援兩種一致性的鎖定讀(locking read)操作:

SELECT......FOR UPDATE
SELECT......LOCK IN SHARE MODE

SELECT…FOR UPDATE對讀取的行記錄加一個X鎖,其他事務不能對已鎖定的行加上任何鎖。SELECT…LOCK IN SHARE MODE對讀取的行記錄加一個S鎖,其他事 務可以向被鎖定的行加S鎖,但是如果加X鎖,則會被阻塞。

對於一致性非鎖定讀,即使讀取的行已被執行了 SELECT…FOR UPDATE,也是可以進行讀取的,這和之前討論的情況一樣。此外,SELECT…FOR UPDATE, SELECT…LOCK IN SHARE MODE必須在一個事務中,當事務提交了,鎖也就釋放了。因此在使用上述兩句 SELECT 鎖定語句時,務必加上 BEGIN , START TRANSACTION 或者 SET AUTOCOMMIT =0 。
本文整理自:《MySQL技術內幕 InnoDB儲存引擎

個人微信公眾號:
這裡寫圖片描述

作者:jiankunking 出處:http://blog.csdn.net/jiankunking