当前位置:七道奇文章资讯数据防范MySQL防范
日期:2011-05-02 15:51:00  来源:本站整理

MySQL数据库表举行锁定详解[MySQL防范]

赞助商链接



  本文“MySQL数据库表举行锁定详解[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

MySQL数据库表举行锁定,服务器由两种表的锁定办法:

1.内部锁定

内部锁定可以避免客户机的恳求彼此干扰——比方,避免客户机的SELECT查询被另一个客户机的UPDATE查询所干扰.也可以操纵内部锁定机制避免服务器在操纵myisamchk或isamchk查抄或修复表时对表的拜候.

语法:

锁定表:LOCK TABLES tbl_name {READ | WRITE},[ tbl_name {READ | WRITE},…]

解锁表:UNLOCK TABLES

LOCK TABLES为当前线程锁定表.UNLOCK TABLES释放被当前线程持有的任何锁.当线程发出别的一个LOCK TABLES时,或当服务器的衔接被关闭时,当前线程锁定的全部表自动被解锁.

假如一个线程得到在一个表上的一个READ锁,该线程(和全部其他线程)只能从表中读.假如一个线程得到一个表上的一个WRITE锁,那么只有持锁的线程READ或WRITE表,其他线程被禁止.

每个线程等候(没有超时)直到它得到它恳求的全部锁.

WRITE锁普通比READ锁有更高的优先级,以确保更改尽快被处理.这意味着,假如一个线程得到READ锁,并且然后别的一个线程恳求一个WRITE锁, 随后的READ锁恳求将等候直到WRITE线程得到了锁并且释放了它.

明显关于查抄,你只需求得到读锁.再者钟情跨下,只能读取表,但不能改正它,因此他也答应别的客户机读取表.关于修复,你必须得到些所以避免任何客户机在你对表举行操作时改正它.

2.外部锁定

服务器还可以利用外部锁定(文件级锁)来避免别的程序在服务器利用表时改正文件.普通,在表的查抄操作中服务器将外部锁定与myisamchk或isamchk作合利用.但是,外部锁定在某些系统中是禁用的,因为他不能坚固的举行工作.对运行myisamchk或isamchk所挑选的历程取决于服务器能否能利用外部锁定.假如不利用,则必修利用内部锁定协议.
假如服务器用--skip-locking选项运行,则外部锁定禁用.该选项在某些系统中是缺省的,如Linux.可以通过运行mysqladmin variables号令肯定服务器能否可以利用外部锁定.查抄skip_locking变量的值并按以下办法举行:

◆ 假如skip_locking为off,则外部锁定有效您可以持续并运行人和一个实用程序来查抄表.服务器和实用程序将合作对表举行拜候.但是,运行任何一个实用程序之前,应当利用mysqladmin flush-tables.为了修复表,应当利用表的修复锁定协议.

◆ 假如skip_locaking为on,则禁用外部锁定,所以在myisamchk或isamchk查抄修复表示服务器并不知道,最好关闭服务器.假如保持是服务器保持开启状况,月确保在您利用此表示没有客户机来拜候它.必须利用卡党的锁定协议奉告服务器是该表不被其他客户机拜候.

查抄表的锁定协议

本节只介绍假如利用表的内部锁定.关于查抄表的锁定协议,此历程只针对表的查抄,不针对表的修复.

1.调用mysql公布下列语句:

$mysql –u root –p db_namemysql>LOCK TABLE tbl_name READ;mysql>FLUSH TABLES;

该锁避免别的客户机在查抄时写入该表和改正该表.FLUSH语句招致服务器关闭表的文件,它将革新仍在奉告缓存中的任作甚写入的改变.

2.履行查抄历程

$myisamchk tbl_name$ isamchk tbl_name

3.释放表锁

mysql>UNLOCK TABLES;

假如myisamchk或isamchk指动身现该表的问题,将需求履行表的修复.

修复表的锁定协议

这里只介绍假如利用表的内部锁定.修复表的锁定历程近似于查抄表的锁定历程,但有两个辨别.第一,你必须得到写锁而非读锁.由于你需求改正表,因此根本不答应客户机对其举行拜候.第二,必须在履行修复之后公布FLUSH TABLE语句,因为myisamchk和isamchk成立的新的索引文件,除非再次革新改表的高速缓存,不然服务器不会注意到这个改变.本例一样合适优化表的历程.

1.调用mysql公布下列语句:

$mysql –u root –p db_namemysql>LOCK TABLE tbl_name WRITE;mysql>FLUSH TABLES;

2.做数据表的拷贝,然后运行myisamchk和isamchk:

$cp tbl_name.* /some/other/dir$myisamchk --recover tbl_name$ isamchk --recover tbl_name

--recover选项只是针对安装而设置的.这些特别选项的挑选将取决与你履行修复的范例.

3.再次革新高速缓存,并释放表锁:

mysql>FLUSH TABLES;mysql>UNLOCK TABLES;   以上是“MySQL数据库表举行锁定详解[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • Windows 搭配 IIS7 PHP MySQL 环境
  • mysql Out of memory (Needed 16777224 bytes)的错误办理
  • mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • MySQL Order By语法介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • mysql数据库插入速度和读取速度的调整记录
  • MySQL Order By索引优化办法
  • MySQL Order By用法分享
  • mysql #1062 –Duplicate entry ''1'' for key ''PRIMARY''
  • MySQL Order By Rand()效率解析
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .