行锁和表锁的区别

行锁

1、支持的存储引擎:Innodb;

2、InnoDB行锁是通过给索引上的索引项加锁来实现的,意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!

3、适用场景:有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用

4、特点:开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高

5、分析:show status like 'innodb_row_lock%';分析系统上行锁的争夺情况如果发现锁争用比较严重,如InnoDB_row_lock_waits和InnoDB_row_lock_time_avg的值比较高,还可以通过设置InnoDB Monitors来进一步观察发生锁冲突的表、数据行等,并分析锁争用的原因。

表锁

1、支持的存储引擎:Innodb、MYIsam

2、适用场景:以查询为主,只有少量按索引条件更新数据的应用

3、特点:开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低

4、两种模式:

​ • 表共享读锁

​ • 表独占写锁

5、对两张表显示加锁、解锁

​ Lock tables orders read local, order_detail read local;

​ Select sum(total) from orders;

​ Select sum(subtotal) from order_detail;

​ Unlock tables;

6、MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁

posted @ 2019-11-21 16:56  那钢绕指柔  阅读(9005)  评论(0编辑  收藏  举报