因为目前接触到的客户还在使用MyISAM存储引擎,因此抽空看了一下MyISAM存储引擎的一些知识。session
因为在2010年MySQL默认的存储引擎已是Innodb存储引擎了,因此一直是深刻了解的是InnoDB相关的知识。并发
结论一:MyISAM存储引擎默认SELECT语句会在表级别加一个共享读锁(table read lock)。spa
结论二:MyISAM存储引擎表会优先执行DML语句,即便是先接受到SELECT语句。blog
如何验证上述两个结论?事务
验证方案:由于MyISAM引擎表不支持事务,因此咱们不能像InnoDB表同样开启一个事务,来查看当前有哪些锁。因此经过模拟并发的操做,第一个session作select操做,第二个session作更新操做,第三个session执行show full processlist;查看语句当前执行的状态。ssl
验证步骤:io
一、首先插入2千万行的数据到myisam表中。table
二、而后打开三个MySQL链接窗口,并准备好下面的语句。第一个session查询某一个值;第二个session执行更新操做,更新全部的行;第三个执行show full processlist;select
三、而后依次执行三个窗口的SQL语句。im
经过上述两个结论咱们能够得出如下几条结论
结论三:MyISAM能够用于非事务性数据系统,能够接受宕机致使数据丢失、而且只有读操做的场景,并不适用于读多写少的场景。由于咱们上面看到了读写是互斥的,这在InnoDB存储引擎是不会发生的,InnoDB经过行多版本并发控制很好的解决了读写互斥的问题,而且保证在读取时,读取到的是已经提交了的数据。