Mysql提供了以下实现表锁定的句法:
LOCK TABLES table-name lock-type,....
解锁命令:
UNLOCK TABLES;
不用指定解锁的表名。
有两种类型的表锁定:读锁定和写锁定。
读锁定:
表的读锁定是指设置锁定的线程可以从表中读数据,其他线程也可以。不过每个线程都不能修改锁定的表,只要锁定处于活动状态就不能添加、
更新或者删除纪录。
READ锁定的一个变体是READ LOCAL锁定,它和常规的READ锁定是不同的,因为其他线程可以执行INSERT语句,它和初始化锁定的线程拥有的
会话不冲突。它是为了使用mysqldump工具对一个表同时进行多个INSERT操作而创建的。
写锁定:
表的写锁定是指设置锁定的线程可以修改表中的数据,但是其他线程在锁定期间既不能从表中读数据也不能写数据。
锁定的优先权:
在同时涉及到WRITE和READ锁定的情况下,MYSQL对于写锁定分配较高的优先级来保证对于表的修改可以尽快地保存到磁盘上。这就降低了
磁盘崩溃或者系统失败导致更新丢失的危险。
表锁定重要的缺点之一:
如果一个线程不释放它的锁定,其他试图访问这个已锁定表的尝试都会超时等待,导致了整体性能很大程度的降低。
阅读(675) | 评论(0) | 转发(0) |