表锁与行锁的区别以及适用情况
生活随笔
收集整理的这篇文章主要介绍了
表锁与行锁的区别以及适用情况
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
什么是锁?
- 锁是计算机协调多个进程或线程并发访问某一资源的机制;
- 在数据库中,除传统的计算资源(如CPU、RAM、I/O、等)的争用外,数据也是一种供许多用户共享的资源;
- 如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素;
- 锁对数据库极其重要,也更复杂。
表锁(偏读)
- 偏向MYISAM存储引擎,开销小,加锁快,无死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低;
- 手动增加表锁:
- 查看表上加过的锁:
- 释放表锁:
可通过检查table_locks_waited和table_locks_immediate状态变量分析系统上的表锁定;
table_locks_waited:出现表级锁定争用而发生等待的次数(不能立即获取锁的次数,每等待一次锁值加1),值越高表明存在着严重的表级锁争用情况; table_locks_immediate:产生表级锁定的次数,表示可以立即获取锁的查询次数,每立即获取锁值加1.tips:MYISAM的读写锁调度是写优先,不适合做写为主表的引擎;写锁后。其他线程不能做任何操作,大量的更新会使查询很难得到锁,可能造成永远阻塞。
行锁(偏写)
- 偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,;锁定粒度最小,发生锁冲突的概率最低,并发度最高。
- InnoDB不同于MYISAM的是:
1.支持事务(TRANSACTION);
2.采用了行级锁。
注意:索引失效可能会使行锁变表锁,尤其varchar类型必须加’’;
间隙锁及危害
- 当用范围条件检索数据时,InnoDB会给符合条件的已有的数据记录的索引项加锁,对于键值在条件范围内但不存在的记录称为“间隙(GAP)”,InnoDB也会对这种“间隙”加锁,这种锁机制称为“间隙锁(Next-Key)”
- 锁定的时候无法插入锁定键值范围内的任何数据。
eg:
如何锁定一行?
select xxx for update锁定一行后,其他的操作会被阻塞,只有锁定行的会话提交commit才会继续其他操作,需要等待。
总结: MYISAM适合读锁(比如APP大量浏览数据),InnoDB适合写锁(比如APP搜索很多关键字并进行交易)。
总结
以上是生活随笔为你收集整理的表锁与行锁的区别以及适用情况的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Android开发入门教程--Andro
- 下一篇: win7中cookie的保存位置