行锁和表锁的区别


行锁

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等)前,会自动给涉及的表加写锁


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM