MySQL锁问题

《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学院为您提供精彩教程。

相关文章

MySQL 死锁 是指两个或多个事务互相等待对方持有的锁,从而导...
在MySQL中,InnoDB引擎通过Next-Key Locking技术来解决幻读问...
在数据库事务管理中,Undo Log 和 Redo Log 是两种关键日志,...
case when概述 sql语句中的case语句与高级语言中的switch语句...
其实很简单,只是为了忘记,做个记录,用的时候方便。 不管是...
1.进入服务,找到mysql服务,在属性里找到mysql的安装路径 2...