mysql锁的介绍

什么是锁

锁是计算机协调过多个进程或线程并发访问某一资源的机制 在数据库中,除传统的计算资源(如cpu、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。 从这个角度来说,锁对数据库而言尤其重要,也更加复杂。

锁分类

1、从数据的操作的粒度来分:
表锁:操作时,会锁定整个表
行锁:操作时,会锁定当前操作行
2、从数据操作的类型分:
读锁(共享锁):针对同一份数据,多个读操作可以同时进行二不会互相影响
写锁(排它锁):当前操作没有完成之前,它会阻断其他写锁和读锁

mysql锁

想对其他数据库而言,mysql的锁机制比较简单,其最显著的特点锁不同的存储引擎支持不同的锁机制。

存储引擎 表级锁 行级锁 页面锁
MyIsam 支持 不支持 不支持
InnoDB 支持 支持 不支持
MemoRy 支持 不支持 不支持
BDB 支持 不支持 支持

mysql的特性大致可归纳于如下

锁类型 特点
表级锁 偏向myisam存储引擎,开销小。加锁快不会出现死锁;锁定粒度打,发生锁冲突的概率最高,并发度最低
行级锁 偏向innodb存储引擎,开销大,加锁慢;会出现死锁;锁定粒度最小发生锁冲突的概率最低,并发度也最高
页面锁 开销和加锁时间介于表锁和行数之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般

读锁会阻塞写,但不会阻塞读 写锁会阻塞其他用户的读和写

很难说清楚那种锁更好,只能就具体应用的特点来说那种锁合适!仅从锁的角度来说:表级锁更适合于查询为主,只有少量按索引条件更新数据的应用,入web应用; 而行级锁则更合适于有大量按索引条件并发更新少量不同数据,同时又有并查询的应,如一些在线的事务处理(oltp)系统

循环
请先登录后发表评论
  • latest comments
  • 总共0条评论