0
为什么mysql在选择数据时向myisam引擎表添加读锁?为什么mysql在选择数据时向myisam引擎表添加读锁?
在官方手册中,只提到innodb具有默认的隔离。并且我们知道myisam引擎不支持事务。但为什么mysql会在选择表中添加读锁?
为什么mysql在选择数据时向myisam引擎表添加读锁?为什么mysql在选择数据时向myisam引擎表添加读锁?
在官方手册中,只提到innodb具有默认的隔离。并且我们知道myisam引擎不支持事务。但为什么mysql会在选择表中添加读锁?
如果在查询读取表时修改了表,则读取查询可能会返回不正确的结果。为防止出现这种情况,MyISAM使用锁*来防止其他线程从该表中读取时写入表。这个锁并不妨碍其他读取查询,但是 - 任何数量的线程都可以共享该锁。
查询写入它们时,表也被锁定。这使用不同类型的锁来防止在该表上发生任何其他写入或读取。
Thanks.But我无法找到正式手册上的读锁(当查询数据时)的信息。它是一个SQL标准吗? – macc
SQL标准并不讨论实现的怪癖,就像MyISAM需要表锁来实现其黑暗魔法一样。老实说,MyISAM实际上并不值得使用,因为这样的事情,它是一个足以满足MySQL 1.0的引擎,但已经过时了现代标准。尽可能使用InnoDB。它支持事务处理,在服务器崩溃的情况下可以安全地回滚日志等等。 – tadman
嗯,你的意思是我们找不到关于myisam读锁的官方上下文(即使myisam引擎的信息很少)。我应该放弃使用myisam引擎。 – macc