mysql8行級别鎖是鎖在索引上的,如果sql語句沒有用到索引,則會鎖表;
例如:
session1執行如下sql語句:
set autocommit=0;
select * from tab_no_index where id = 2 for update;
id列沒有索引;
session2執行如下sql語句:
select * from tab_no_index where id = 1 for update;
則會一直處于等待中,因為沒有索引,雖然查詢的不是一行資料,但會觸及表級鎖,session1會話中占用了表鎖,是以這個一直在等待中;
怎麼然session2執行下去呢,就是session1釋放表級别鎖,兩種方式,第一删除會話id,第二種送出事務就可以了;
如果你是剛開始學習java,或者剛開始從事java行業,有很多的問題都可以關注微信公衆号: java學長 ,一個緻力于打造免費指導學習java高薪就業的公益平台!點贊、關注 哦,不定期分享程式員的騷操作和強勢浪漫!