1. 程式人生 > >mysql 並行寫資料導致重複的問題,加間隙鎖解決

mysql 並行寫資料導致重複的問題,加間隙鎖解決

   前期設計只會有一個客戶端,現在變為多個客戶端接收同樣的資料,向本地伺服器寫同樣的資料,採用的是mysql的預設事務級別,頻繁導致資料重複。     先是加個行鎖 ,兩個客戶端都執行這段程式碼時,第一個會鎖住;後面的只能等待,類似lock概念;但是未解決資料重複的問題,因為repeatable-read是Mysql預設事務隔離級別!能解決髒讀以及不可重複讀的問題,但可能出現幻讀的情況,對幻讀的概念一直理解不對。 幻讀是在執行期間讀不到其它事務插入的資料     加鎖有兩種方式,一個是行鎖,一個是表間隙鎖;關鍵都要鎖住要插入或者修改的行。我是特意建的鎖表,雖然鎖住了事務,但仍然出現幻讀,最後對關鍵表加了間隙表鎖,解決了問題   參考如下的文件http://www.mamicode.com/info-detail-511523.html,增加了間隙表鎖,其它的事務在執行到此處時,會等待此事務執行 行鎖方式:        selectcount(*) intocountfrom yyb_data_lock where id=2 FORUPDATE;