MySQL的锁机制
锁是计算机协调多个线程或者线程并发访问某一个资源的机制。MySQL支持对MyISAM和MEMORY存储引擎的表进行表级锁定,对BDB存储引擎的表进行页级锁定和表级锁定,对InnoDB存储引擎的表进行行级锁定和表级锁定。默认情况下,表锁和行锁都是自动获得的,不需要额外的命令。
MySQL中表级锁、行级锁和页面锁的特性可以大致归纳如下:表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。行级锁:开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率最低,并发度也最高。页面锁:开销和加锁时间介于表锁和行锁之间,会出现死锁,锁定粒度介于表锁和行锁之间,并发度一般。
MyISAM引擎
MyISAM引擎使用的是表锁。对于MyISAM表的读操作,不会阻塞其他用户对同一表的读请求,但是会阻塞对同一表的写请求;对MyISAM表的写操作,则会阻塞其他用户对同一表的读和写操作。MyISAM的读和写之间,以及写操作之间都是串行的。
MyISAM在执行查询语句前,会自动给涉及的所有表加读锁,在执行更新操作时,会自动给涉及的表加写锁。给MyISAM表显示加锁,一般是为了在一定程度上模拟事务操作,实现对某一时间点多个表的一致性读取。LOCK TABLES可以用于当前线程的表,如果表被其它线程锁定,则当前线程会等待,直到可以获取所有锁定为止。UNLOCK TABLES可以释放当前线程获得的任何锁定。
一个进程请求某个MyISAM表的读锁,同时另外一个进程也请求同一个表的写锁,那么写进程会先获得锁。
InnoDB引擎
InnoDB引擎与MyISAM的最大不同点有两处:一是支持事务,二是采用行级锁。
InnoDB实现了以下两种类型的行锁:共享锁:允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁;排他锁:允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁。为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB还有两种内部使用的意向锁(意向共享锁和意向排他锁)。这两种意向锁都是表锁。意向锁是InnoDB自动加的,不需要用户干预。对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加排他锁;对于普通SELECT语句,InnoDB不会加任意锁。事务可以通过以下语句显示给记录集加共享锁或者排他锁:
共享锁:SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE排他锁:SELECT * FROM table_name WHERE ... FOR UPDATE
InnoDB的行锁实现的特点:只有通过索引条件检索数据,InnoDB才会使用行级锁,否则,InnoDB将会使用表锁。因为MySQL的行锁是针对索引加的锁,而不是针对记录加的锁,所以虽然是访问不同行的记录,但是如果是使用相同的索引建,是会出现锁冲突的。
对于键值在条件范围内但并不存在的记录,叫做间隙。InnoDB会对这个间隙加锁,这种锁机制就是所谓的间隙锁(Next-Key锁)。InnoDB使用间隙锁的目的:一是为了防止幻读,二是为了满足其恢复和复制的需要。
死锁问题
MyISAM表锁是deadlock free的,这是因为MyISAM总是一次获得所需要全部锁,要么全部满足,要么等待,因此不会出现死锁。
在InnoDB中,锁是逐步获得的,因此发生死锁是可能的。发生死锁后,InnoDB一般都能自动检测到,并使一个事务释放锁并回退,另外一个事务获得锁,并继续完成事务。但在涉及外部锁,或涉及表锁的情况下,InnoDB并不能完全自动检测到死锁,这需要通过设置锁等待超时参数innodb_lock_wait_timeout来解决。
>更多相关文章
- 10-26高手浅谈MySQL数据库的几个安全问题
- 10-26MySQL False 黑客注入及技巧总结
- 02-2514种最好方法保护MySQL全面安全
- 12-23mysqltoolkit用法[备忘]
- 12-23一个基于MySQL的Key-List存储方案
- 12-21ODBC中遇到的错误
- 12-21使用mysql遇到的问题
- 12-21PAIP.MYSQLSLEEP连接太多解决
首页推荐
佛山市东联科技有限公司一直秉承“一切以用户价值为依归
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 12-25优酷推出U镜到底等直播功能 已应用在羽毛球
- 12-25百川智能正式发布全链路领域增强大模型
- 12-25SHEIN4家仓储物流园获“零废工厂”认证
- 12-25西方博主在TikTok上展现中国风貌,“China
- 12-05亚马逊推出新一代基础模型 任意模态生成大模
相关文章
24小时热门资讯
24小时回复排行
热门推荐
最新资讯
操作系统
黑客防御