特别注意:行锁,表锁区别:其实就是看where后面的条件是否有有索引,有索引的时候就是行锁,没有索引的时候就是表锁,主键本身就是索引。
也就是没有索引的话,虽然修改的是一行,但是还是是锁表,但是where条件后面是主键是行锁
1.查看mysql自动提交是否开启
show variables like '%commit%'
2.当前 session1关闭mysql自动提交
set autocommit=off;
3.新建test表,session1更新表数据
update test set data='test@test.com' where id=1;
4.新开一个session2窗口更新同样行数据,注意行锁有等待超时限制,一定时间会释放
set autocommit=off;
update test set data='aa@aa.com' where id=2;
commit;
发现id=2可以修改,证明session1触发的是行锁,这个时候去更新同样的行
update test set data='aa@aa.com' where id=1;
5.查看系统是否有锁等待
show status like '%lock%';
Innodb_row_lock_current_waits这个参数的值
6.查看show open tables ,可以看出
show open tables where In_use > 0;