【发布时间】:2017-08-14 07:04:19
【问题描述】:
为什么mysql在选择数据时要给myisam引擎表加读锁?
官方手册上只提到innodb有一个默认的隔离。而且我们知道myisam引擎不支持事务。但是为什么mysql要给选择表加读锁呢?
【问题讨论】:
为什么mysql在选择数据时要给myisam引擎表加读锁?
官方手册上只提到innodb有一个默认的隔离。而且我们知道myisam引擎不支持事务。但是为什么mysql要给选择表加读锁呢?
【问题讨论】:
如果查询正在读取表时修改了表,则读取查询可能会返回不正确的结果。为了防止这种情况,MyISAM 使用 lock* 来防止在任何其他线程正在从该表读取时对表进行写入。不过,此锁不会阻止其他读取查询 - 任意数量的线程都可以共享该锁。
当查询写入表时,表也会被锁定。这使用不同类型的锁来防止在该表上发生任何其他写入或读取。
【讨论】: