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

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.

Myisam即使在High Performance MySQL什么时候也会锁定表?有人能解释一下吗?

最佳答案

米萨姆有各种各样的锁。aSELECT操作在表上放置一个读锁。只要没有活动的写锁,在任何给定时间都可以有多个活动的读锁。修改表的操作,例如在表上放置写锁。只有当没有活动读锁时,写锁才能放在表上;如果有活动读锁,myisam会在所有活动读锁过期后将要激活的写锁排队。
同样,当存在活动的写锁时,尝试在表上放置读锁将使锁(和相关联的查询)排队,直到表上的写锁过期。
最终这意味着:
可以有任意数量的活动读锁(也称为共享锁)
只能有一个活动的写锁(也称为独占锁)
有关详细信息,请参见:http://dev.mysql.com/doc/refman/5.5/en/internal-locking.html

10-01 05:10