mysql中的共享鎖和排他鎖是用來(lái)管理多個(gè)事務(wù)同時(shí)訪問(wèn)同一數(shù)據(jù)行的鎖機(jī)制。下面我們分別介紹一下共享鎖和排他鎖的寫(xiě)法。
-- 共享鎖寫(xiě)法 SELECT * FROM table_name WHERE column_name = 'value' LOCK IN SHARE MODE;
共享鎖可以在多個(gè)事務(wù)之間共享,對(duì)于同一行數(shù)據(jù)的多個(gè)讀取操作,可以同時(shí)獲取共享鎖,但是不能和其他事務(wù)的排它鎖或更新鎖同時(shí)存在,因?yàn)榕潘i或更新鎖需要獨(dú)占式的訪問(wèn)數(shù)據(jù)行。共享鎖在事務(wù)提交或回滾后自動(dòng)釋放。上述代碼我們使用了LOCK IN SHARE MODE關(guān)鍵字來(lái)獲取共享鎖。
-- 排他鎖寫(xiě)法 SELECT * FROM table_name WHERE column_name = 'value' FOR UPDATE;
排他鎖是一種獨(dú)占鎖,只能用于單個(gè)事務(wù)的操作,其它事務(wù)無(wú)法獲取排他鎖,也無(wú)法讀取或修改數(shù)據(jù)行。排它鎖可以用來(lái)保證事務(wù)的獨(dú)占訪問(wèn),防止多個(gè)事務(wù)同時(shí)修改同一數(shù)據(jù)行而產(chǎn)生的競(jìng)爭(zhēng)條件,但是會(huì)導(dǎo)致并發(fā)性能受到影響。根據(jù)上述代碼,我們可以使用FOR UPDATE關(guān)鍵字來(lái)獲取排它鎖。