即使在处理'select'查询时,myisam也会将表锁定在表上?

Jam*_*.Xu 4 mysql myisam table-lock

我正在读这本书High Performance MySQL,它提到:

performing one query per table uses table locks more efficiently: the queries 
will lock the tables invididually and relatively briefly, instead of locking 
them all for a longer time.
Run Code Online (Sandbox Code Playgroud)

selecting什么东西,MyISAM放置表锁?有人可以解释一下吗?

rek*_*o_t 11

MyISAM有不同类型的锁.一个SELECT操作放置一个读锁在桌子上.只要没有活动的WRITE LOCKS,任何给定时间都可以有多个活动读.修改表格的操作,例如 INSERT,UPDATE,DELETEALTER TABLE放置一个写锁定在桌子上.只有没有活动的读锁时,才能将写锁定放在表中; 如果存在活动读锁定,则只要所有活动读锁定都到期,MyISAM就会将写锁定队列激活.

同样,当存在活动写锁时,尝试在表上放置读锁将对锁(以及关联查询)进行排队,直到表上的写锁已过期.

最终这意味着:

  • 您可以拥有任意数量的活动读锁(也称为共享锁)
  • 您只能有一个活动写锁(也称为独占锁)

有关更多信息,请参阅:http://dev.mysql.com/doc/refman/5.5/en/internal-locking.html