校园学生学习娱乐资源第一门户 校园第一站 源于校园 服务于校园 分享资源和快乐 网站地图 高级搜索 RSS订阅 收藏本站 设为首页
首页 | 校园 | 教育 | 考试 | 电脑 | 英语 | 读书 | 就业 | 论文 | 体育 | 健康 | 图片 | 分类信息
Q Q | 下载 | 游戏 | 音乐 | 影视 | 专题 | 祝福 | 百科 | 问答 | 博客 | 会员 | 社区 | 校园论坛
·偶像剧免费在线收看
·DEDECMS免费模板规则下载
·
·全能空间、网站建设仅200
文章搜索:
  当前位置: 主页>电脑>数 据 库>MySQL> 文章正文

MySQL语言四:数据操纵

http://www.xydyz.com 来源:校园第一站 2007-11-30 阅读: 评论


INSERT 的完成,这将会是很有用的。This is a common problem when you use MySQL for logging and 当你打开日志记录使用 MySQL 并且你周期性的需花费很长时间才完成的 SELECTUPDATE 语句时,这将是一个很普遍的问题。DELAYED 在 MySQL 3.22.15 中被引入。它是 MySQL 对 ANSI SQL92 的一个扩展。

INSERT DELAYED 仅仅工作与 ISAMMyISAM 表。注意,因为 MyISAM 表支持并发的 SELECTINSERT,如果在数据文件中没有空闲的块,那你将很少需要对 MyISAM 表使用 INSERT DELAYED。查看章节 7.1 MyISAM

当你使用 INSERT DELAYED 时,客户端将立即得到一个 OK,当表不被任何其它线程使用时,该行将被插入。

使用 INSERT DELAYED 的另一个主要的好处就是,从很多客户端来的插入请求会被打包在一起并写入一个块中。这比做许多单独的插入要快的多。

注意,当前的记录行队列是被存储在内存中的,一直到他们被插入到表中。这就意味着,如果你使用强制的方法(kill -9) 杀死 mysqld,或者如果意外地死掉,任何没有写到磁盘中的记录行队列都将会丢失!

下面详细地描述当你为 INSERTREPLACE 使用 DELAYED 选项时会发生什么。在这个描述中,“线程”是遇到一个 INSERT DELAYED 命令的线程,“处理器”是处理所有对于一个特定表的 INSERT DELAYED 语句的线程。

  • 当一个线程对一个表执行一个 DELAYED 语句时,将会创建一个处理器线程用以处理对该表的所有 DELAYED 语句,除非这样的处理器已经存在。

     

  • 线程检查处理器是否已经获得了一个 DELAYED 锁;如果还没有,这告诉处理程序去获得。即使其它的线程已在表上加了一个 READWRITE 锁,也能获得 DELAYED 锁。然而,处理器将等待所有的 ALTER TABLE 锁或 FLUSH TABLES 以保证表结构是最新的。

     

  • 线程执行 INSERT 语句,但是并不将记录行写到表中,它将最终的记录行的副本放到被处理器线程管理的队列中。任何语法错误都会被线程发现并报告给客户程序。

     

  • 客户端不能报告结果记录行中重复次数或 AUTO_INCREMENT 值;它不能从服务器获得它们,因为 INSERT 早在插入操作被完成之前就返回了。如果你使用 C API,mysql_info() 函数也因同样的原因而不能获得任何有意义的信息。

     

  • 当记录行被插入到表中时,二进制的日志文件将被处理器线程更新。对于多记录行的插入,当第一个记录行被插入时,二进制日志被更新。

     

  • 当每写入 delayed_insert_limit 个记录行后,处理器检查是否仍有任何 SELECT 语句没有解决。如果是这样,处理器允许在继续之前让这些语句先执行。

     

  • 当处理器发现在它的队列中没有太多的记录行时,表将被解锁。如果在 delayed_insert_timeout 秒内没有接收到新的 INSERT DELAYED 命令,处理器线程将终止。

     

  • 如果在一个特定的处理器队列中已有超过 delayed_queue_size 个记录行未被解决,线程要求 INSERT DELAYED 等待,只到在队列中有可用空间。这样做是为了保证 mysqld 服务器对延迟内存队列不使用全部的内存。

     

  • 处理器线程在 MySQL 进程列表中的 Command 列上显示为 delayed_insert。如果执行一个 FLUSH TABLES 命令或以 KILL thread_id 杀死它,它将会被杀死。然而,它在退出前会首先将所队列记录行保存到表中。这些期间,它将不再接收其它线程的任何新的 INSERT 命令。如果再此之后执行一个 INSERT DELAYED 命令,一个新处理器线程将会被创建。 注意,上面的意思是,如果一个 INSERT DELAYED 处理器已在运行,那么 INSERT DELAYED



【责任编辑:admin 】




评论
用户名: 新注册) 密码: 匿名评论
评论内容:不能超过250字,请自觉遵守互联网相关政策法规。
  相关文章
MySQL语言三:SELECT和WHERE子句的函数
MySQL语言五:数据定义
MySQL语言二:列类型
MySQL语言六:基本的MySQL用户实用命令
MySQL语言一:语言结构
  最新图片
如何安全的远程使用MySQL GUI工具
如何安全的远程使用My
24小时TOP
   
·MySQL语言三:SELECT和WHERE子句的函数
·MySQL语言二:列类型
·MySQL语言五:数据定义
·MySQL语言一:语言结构
·MySQL语言九:MySQL 查询缓存
·MySQL语言八:MySQL 全文搜索
·MySQL语言七:MySQL 事务与锁定命令
·MySQL语言六:基本的MySQL用户实用命令
热门图片
  更多>>>
如何安全的远程使用MySQL GUI工具
如何安全的远程使用
焦点聚焦
  更多>>>
·MySQL语言一:语言结构
论坛精华
  更多>>>
·真钱斗地主轧金花龙虎板玖和百家乐http://c
·22岁女大学生要嫁48岁乞丐(图)
·一条短信毁了一种水果 “蛆橘”传言流变调
·蒙古风情十四怪 (一)
·《中国高新技术企业》--www.txrb.com--科信
·东莞大金空调官方介绍 13559702882卢生
·乐众国际最新博彩游戏!真实!新鲜!刺激!
·快国庆了大家怎么安排
最新图片
  更多>>>
如何安全的远程使用MySQL GUI工具
如何安全的远程使用
推荐文章
  更多>>>
·如何安全的远程使用MySQL GUI工具
关于我们 - 版权声明 - 免责声明 - 欢迎投稿 - 广告服务 - 友情链接 - 网站建设 - 诚聘英才 - 联系我们 - -
Copyright @2007-2009 www.xydyz.com © All rights reserved.
校园第一站 版权所有 客服E-Mail:hyperblue@163.comn 点击这里给我发消息
Site design by hyperblue 鄂ICP备07009403号 Powered by DedeCms