默認隔離級別下 , mysql沒有解決幻讀問題 , 需要應用代碼里加一個鎖來解決
幻讀問題是啥?
默認的隔離級別是可重復讀 REPEATABLE-READ , 在這個模式下出現幻讀的例子一般是這兩種情況:
事務1和事務2同時 , 事務1讀數據 , 事務2插入數據提交 , 事務1插入同樣的數據時報錯說已經重復了 , 我明明剛才查的時候沒有 , 為啥報重復了?
事務1和事務2同時 , 事務1讀數據 , 事務2插入數據提交 , 事務1更新數據可以把事務2的數據也一塊給更了 , 明明剛才沒有怎么突然多出來數據了?
解決方式是在select讀時候的sql中增加for update , 會把我所查到的數據鎖住 , 別的事務根本插不進去 , 這樣就解決了,這里用到的是mysql的next-key locks