MySQL 5.1支持对MyISAM和MEMORY表进行表级锁定,对BDB表进行页级锁定,对InnoDB表进行行级锁定。
MySQL使用的表锁定方法原理如下:
LOCK TABLES可以锁定用于当前线程的表,如果表被其它线程锁定,则造成堵塞,直到可以获取所有锁定为止。UNLOCK TABLES可以释放被当前线程保持的任何锁定。当线程发布另一个LOCK TABLES时,当该与服务器的连接被关闭时,所有由当前线程锁定的表被隐含地解锁。
语法:
LOCK TABLE table1 locktype, table2 locktype …
locktype类型:
WRITE 被锁定的数据表允许当前用户线程(发出LOCK命令的用户‘线程’)进行读和写,其他用户则不能进行读写修改操作。
READ 被锁定的数据表对全体用户线程可读,但不允许修改(包括发出LOCK命令的用户线程),
READ LOCAL 类似于READ锁定类型,但允许不影响现在数据记录的INSERT命令执行。
LOW PRIORITY WRITE
MyISAM存储引擎存在读阻塞,如用户在当前线程发出LOCK命令锁定A表,那么B表也会受到影响,但在其他线程B表则不被影响。