加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL锁问题

发布时间:2020-12-12 03:05:49 所属栏目:MySql教程 来源:网络整理
导读:《MySQL锁问题》要点: 本文介绍了MySQL锁问题,希望对您有用。如果有疑问,可以联系我们。 MySQL的锁机制比拟简单,不同的存储引擎支持的不同的锁机制.如:MyISAM和MEMORY存储采用表级锁(table-level locking),BDB存储引擎采用的是页面锁(page-level locking

《MySQL锁问题》要点:
本文介绍了MySQL锁问题,希望对您有用。如果有疑问,可以联系我们。

MySQL的锁机制比拟简单,不同的存储引擎支持的不同的锁机制.如:MyISAM和MEMORY存储采用表级锁(table-level locking),BDB存储引擎采用的是页面锁(page-level locking),InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下采用的是行级锁.

三种锁的特性大致如下:

表级锁:开销小,加锁快;不会出现死锁,锁定粒度大,发生锁冲突的概率最高,并发粒度最低;

页面锁:开销和加锁时间介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间;并发度一般;

行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发读也最高;

以上的特性主要是因为锁模式决定的,在MySQL中锁模式分为两种:共享锁(读锁)和独占锁(写锁).

1)以表级锁来分析锁模式:

当数据表已经被其中一个连接获得了读锁,不会阻塞其他连接对这个表的读哀求,但是如果有其他连接需要进行写入,因为该表已经被设置读锁了,其他连接是不能获得写锁的,需要等待所有的读锁释放,它才能获得写锁.

而如果一个表已经被一个连接获得写锁,它会阻塞所有其他哀求对这个表的读哀求和写哀求,直至这个写锁被释放.

2)以行级锁来分析锁模式:

锁模式的原理跟上述描述的表级锁是一样的,只是它是根据行的粒度来设置锁的.如果某一行被写锁了,它是不会阻塞其他连接对另外行的写哀求的.

因为MySQL从5.5.5开始默认的存储引擎是InnoDB,了解InnoDB的行级锁对我们索引的优化也是一个非常大的赞助.那么MySQL是根据什么来设置行锁的范围的呢?

答案是索引,如果SQL执行计划是依照某个索引进行的,那么他会根据该索引关联到的行进行锁定.如果SQL执行计划没有利用到索引,那么就是整个表锁定了.表锁是个很恐怖的东西,如果数据库有大量更新操作的时候,那么数据库的并发性能将大大降低.

所以索引不但是单存影响查询的效率,在并发性能上也是一个大问题.

《MySQL锁问题》是否对您有启发,欢迎查看更多与《MySQL锁问题》相关教程,学精学透。编程之家PHP学院为您提供精彩教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读