MySQL中鎖是用來控制數據并發更新的機制。在使用鎖的過程中,一般有兩種方式,一種是讀鎖(共享鎖),另外一種是寫鎖(排它鎖)。這里我們主要來看一下MySQL中寫鎖是否可讀。
在執行寫入操作時,MySQL會自動給該行記錄加上寫鎖,這時其他的事務無法讀取該行記錄,但是在事務提交之前,其他的事務也無法修改該行記錄。因此可以得出,在執行寫鎖操作的時候,該行記錄是不可讀的。
--假設有以下兩個SQL語句 transaction A: select * from table where id=1 for update; transaction B: select * from table where id=1; --在transaction A執行完的時候,該行記錄已經被加上了寫鎖,因此在transaction B中無法讀取該行記錄。
但是有一種特殊情況,就是事務在執行過程中對同一條記錄多次加寫鎖的情況,這時其他事務執行讀操作會讀取到該行記錄的最新值,這是由于之前的寫鎖未被釋放,在該事務中該記錄是可讀的。
--假設有以下兩個SQL語句 transaction A: select * from table where id=1 for update; transaction A: select * from table where id=1 for update; --在transaction A中,由于該事務對該行記錄使用了兩次寫鎖,因此另一事務依然可以讀取該行記錄的最新值。
綜上所述,MySQL中寫鎖的時候,該行記錄一般是不可讀的,但是在同一事務中的多次加寫鎖的情況下,該記錄是可讀的。