因爲InnoDB引擎預設的是Row-Level Lock,因此只有明確的主鍵,MySQL纔會執行行鎖.不然MySQL將會執行表鎖.spa
實驗以下:事務
1.當咱們使用主鍵做爲查詢查詢條件,並使用for update加鎖的時候,咱們只是對這條記錄加鎖:it
終端1: id=1的記錄已經被加鎖,在事務提交以前,終端2沒法讀取到這條記錄.date
終端2:如今沒法讀取id=2的記錄,可是能夠讀取主鍵爲其餘值的記錄. 終端
終端1的事務提交(commit)以後,終端2的事務才能夠查詢到id=1的記錄 im
2.當咱們不使用主鍵做爲查詢條件並for update,會觸發表鎖.查詢
終端1:使用非主鍵做爲關鍵字做爲檢索條件終端2:在事務提交以前,終端2沒法以各類條件查詢,由於終端1事務已經觸發了表鎖. img
終端2:在事務提交以前,終端2沒法以各類條件查詢,由於終端1事務已經觸發了表鎖.co