1.对于mysql学习,经常翻看一些博客,论坛,好像或多或少有mysq锁机制的学习与总结,所以今天有必要
对mysql锁机制的一些个人的总结,以便以后深入的学习。
2.学习这件事,从来都是“深入浅出”的,今天留个痕迹,说不定以后“受益匪浅”。
a.数据库锁是什么
数据库锁就是为了保证数据库数据的一致性在一个共享资源被并发访问时使得数据访问顺序化的机制。
MySQL数据库的锁机制比较独特,支持不同的存储引擎使用不同的锁机制。
b.mysql锁机制的3中类型
表级锁,行级锁,页级锁
c.各级锁的特点
表级锁:实现逻辑较为简单,加锁速度快,开销小,不会发生死锁;但粒度最大,发生锁冲突的几率最大,并发度最小,适用于以查询为主,极少量更新的系统。
行级锁:加锁慢,开销大,会发生死锁;但粒度最小,锁冲突率小,并发度最高,使用于并发查询大,有大量按索引条件并发更新少量不同数据的系统。
页级锁:介于表级锁和行级锁之间。
d.myisam存储引擎只支持表级锁。
它的锁模式分为两种:表共享读锁和表独占写锁。
MyISAM的读操作会阻塞其他用户的写操作,但不会阻塞其他用户的读操作。MyISAM的写操作会堵塞其他用户的读写操作。MyISAM的读写操作是串行的。
e.查看myisam存储引擎的锁情况
mysql> show status like ‘table_locks%‘;
-----Table_locks_immediate 立即释放表锁数 -----Table_locks_waited 等待表锁数,该值如较高,说明表锁争用较严重 f.测试信息
g.MyISAM表写操作阻塞示例:
mysql> lock table stu write;
g-1,select
g-2,delete..from
g-3,update..set
g-4,insert into..
h.到这里感觉加锁与没有加锁,貌似差距不是很大。。。???
i,再访问一下其他表的“增删改查”的操作
好吧,已经有一个表:stu;
i-1,select..
i-2,delete from..
i-3,insert into..
i-4,update..set..
j.发现,除表tem以外的表的“增删改查”都不好使,,这就是“MyISAM的写操作会堵塞其他用户的读写操作”的意思。