MySQL数据库表怎么锁定

soゝso 2016-08-22 18:18:53 779
分享到:

如果你同时运行表的检查/修复程序时,你或许不想让MySQL服务器和实用程序同时访问一个表。如果两个程序都向表中写数据显然会造成很大的麻烦,甚至会有意外情况发生。如果表正由一个程序写入,同时进行读取的另一个程序也会产生混乱的结果。本文主要讲述如何对MySQL数据库表进行锁定。

锁定表的方法

防止客户机的请求互相干扰或者服务器与维护程序相互干扰的方法主要有多种。如果你关闭数据库,就可以保证服务器和myisamchkisamchk之间没有交互作用。但是停止服务器的运行并不是一个好注意,因为这样做会使得没有故障的数据库和表也不可用。本节主要讨论的过程,是避免服务器和myisamchkisamchk之间的交互作用。实现这种功能的方法是对表进行锁定。

服务器由两种表的锁定方法:

1.内部锁定

内部锁定可以避免客户机的请求相互干扰——例如,避免客户机的SELECT查询被另一个客户机的UPDATE查询所干扰。也可以利用内部锁定机制防止服务器在利用myisamchkisamchk检查或修复表时对表的访问。

语法:

锁定表:

LOCK TABLES tbl_name {READ | WRITE},[ tbl_name {READ | WRITE},…]

解锁表:

UNLOCK TABLES

LOCK TABLES为当前线程锁定表。UNLOCK TABLES释放被当前线程持有的任何锁。当线程发出另外一个LOCK TABLES时,或当服务器的连接被关闭时,当前线程锁定的所有表自动被解锁。

如果一个线程获得在一个表上的一个READ锁,该线程(和所有其他线程)只能从表中读。如果一个线程获得一个表上的一个WRITE锁,那么只有持锁的线程READWRITE表,其他线程被阻止。

每个线程等待(没有超时)直到它获得它请求的所有锁。

WRITE锁通常比READ锁有更高的优先级,以确保更改尽快被处理。这意味着,如果一个线程获得READ锁,并且然后另外一个线程请求一个WRITE锁, 随后的READ锁请求将等待直到WRITE线程得到了锁并且释放了它。

显然对于检查,你只需要获得读锁。再者钟情跨下,只能读取表,但不能修改它,因此他也允许其它客户机读取表。对于修复,你必须获得些所以防止任何客户机在你对表进行操作时修改它。

2.外部锁定

服务器还可以使用外部锁定(文件级锁)来防止其它程序在服务器使用表时修改文件。通常,在表的检查操作中服务器将外部锁定与myisamchkisamchk作合使用。但是,外部锁定在某些系统中是禁用的,因为他不能可靠的进行工作。对运行myisamchkisamchk所选择的过程取决于服务器是否能使用外部锁定。如果不使用,则必修使用内部锁定协议。

如果服务器用--skip-locking选项运行,则外部锁定禁用。该选项在某些系统中是缺省的,如Linux。可以通过运行mysqladmin variables命令确定服务器是否能够使用外部锁定。检查skip_locking变量的值并按以下方法进行:

  1. 如果skip_lockingoff,则外部锁定有效您可以继续并运行人和一个实用程序来检查表。服务器和实用程序将合作对表进行访问。但是,运行任何一个实用程序之前,应该使用mysqladmin flush-tables。为了修复表,应该使用表的修复锁定协议。
  2. 如果skip_locakingon,则禁用外部锁定,所以在myisamchkisamchk检查修复表示服务器并不知道,最好关闭服务器。如果坚持是服务器保持开启状态,月确保在您使用此表示没有客户机来访问它。必须使用卡党的锁定协议告诉服务器是该表不被其他客户机访问。

检查表的锁定协议

本节只介绍如果使用表的内部锁定。对于检查表的锁定协议,此过程只针对表的检查,不针对表的修复。

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;

如果myisamchkisamchk指出发现该表的问题,将需要执行表的修复。

本文中就为大家总结了上文介绍的这些,上文中涉及到的内容就是我要为大家讲解的关于如何锁定 MySQL 数据库表的全部讲解,希望上文中涉及到的内容对大家能够有所帮助。

关于作者
目前就职于国内某电商平台公司打杂。。
相关文章
MySql数据库优化注意的四个细节(方法)
MySQL数据库存储过程字符集问题,乱码的解决办法
MySQL数据库为用户设置密码,Mysql修改密码。Mysql忘记密码解决方法
MySQL 分区、分
Druid数据库配置详细介绍。网上一团糟。
怎么合理管理、提高Javascript的性能
Oracle与Mysql删除重复的数据,Oracle和Mysql数据去重复
MySQL无法存储Emoji情,IPhone情问题 。
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统?
SEO 教程 , 怎么构建网站结构路径?网站目录结构对SEO的影响
最新文章
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 39153
SOJSON 使用又拍云 CDN 整体架构,解决百度 SEO 方案 33
又拍云(Upyun)刷新CDN,云存储缓存 —JavaAPI 20
JS解密,JavaScript 解密,任何JS加密都能100%解密,以及JS 加密讲解 83
阿里云DNS 解析讲解,SEO配置搜索引擎线路解析 45
百度秒收录教程,怎么做到百度秒收入你的页面,SEO 教程 101
CDN 请求返回 connection reset by peer,被拦截请求解决方案 37
Google AdSense 申请技巧,谷歌广告申请通不过教程 69
Mac 安装 JMeter,JMeter 下载,JMeter Http 压力测试【图解】 51
支付宝吱口令自动复制脚本,自动复制 JavaScript 代码介绍 916
最热文章
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 39097
Elasticsearch教程(四) elasticsearch head 插件安装和使用 109124
Elasticsearch教程(六) elasticsearch Client创建 73308
Elasticsearch教程(八) elasticsearch delete 删除数据(Java) 70761
Elasticsearch教程(二),IK分词器安装 67505
Elasticsearch教程(三),IK分词器安装 (极速版) 54092
Elasticsearch教程(五) elasticsearch Mapping的创建 51628
Elasticsearch教程(一),全程直播(小白级别) 51390
Elasticsearch教程(七) elasticsearch Insert 插入数据(Java) 47779
Elasticsearch权威指南-中文.pdf,Elasticsearch 中文文档下载 40948

骚码加入我们 / 千人QQ群:259217951

入群需要5元,如果没有QQ钱包,可以先Alipay、微信,赞助然后加群主拉进。

二维码生成 来自 >> 二维码生成器

支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

正在加载... ...