始创于2000年 股票代码:831685
咨询热线:0371-60135900 注册有礼 登录
  • 挂牌上市企业
  • 60秒人工响应
  • 99.99%连通率
  • 7*24h人工
  • 故障100倍补偿
您的位置: 网站首页 > 帮助中心>文章内容

为存储引擎添加对UPDATE的支持

发布时间:  2012/8/23 16:49:37

通过执行表扫描操作,在找到与UPDATE语句的WHERE子句匹配的行后,MySQL服务器将执行UPDATE语句,然后调用update_row()函数:

 

int ha_foo::update_row(const byte *old_data, byte *new_data)  

*old_data参数包含更新前位于行中的数据,*new_data参数包含行的新内容(采用MySQL内部行格式)。

更新的执行取决于行格式和存储实施方式。某些存储引擎将替换恰当位置的数据,而其他实施方案则会删除已有的行,并在数据文件末尾添加新行。

 

非事务性存储引擎通常会忽略*old_data参数的内容,仅处理*new_data缓冲。事务性存储引擎可能需要比较缓冲,以确定在上次回滚中出现了什么变化。

 

如果正在更新的表中包含时间戳列,对时间戳的更新将由update_row()调用管理。下述示例来自CSV引擎:

 

int ha_tina::update_row(const byte * old_data, byte * new_data)  
 {  
   int size;  
   DBUG_ENTER("ha_tina::update_row");  
  电脑技术www.boydavid.com 
   statistic_increment(table->in_use->status_var.ha_read_rnd_next_count, 电脑技术www.boydavid.com 
                     &LOCK_status); 电脑技巧www.boydavid.com 
   
   if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_UPDATE) 计算机学习网站www.boydavid.com 
     table->timestamp_field->set_time();  
   
   size= encode_quote(new_data);  
   
   if (chain_append())  
     DBUG_RETURN(-1);  
   
   if (my_write(share->data_file, buffer.ptr(), size, MYF(MY_WME | MY_NABP)))  
     DBUG_RETURN(-1);  
   DBUG_RETURN(0);  
 } 电脑学习网站www.boydavid.com 

请注意上例中的时间戳设置。


本文出自:亿恩科技【www.enkj.com】

服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]

  • 您可能在找
  • 亿恩北京公司:
  • 经营性ICP/ISP证:京B2-20150015
  • 亿恩郑州公司:
  • 经营性ICP/ISP/IDC证:豫B1.B2-20060070
  • 亿恩南昌公司:
  • 经营性ICP/ISP证:赣B2-20080012
  • 服务器/云主机 24小时售后服务电话:0371-60135900
  • 虚拟主机/智能建站 24小时售后服务电话:0371-60135900
  • 专注服务器托管17年
    扫扫关注-微信公众号
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 亿恩科技 版权所有  地址:郑州市高新区翠竹街1号总部企业基地亿恩大厦  法律顾问:河南亚太人律师事务所郝建锋、杜慧月律师   京公网安备41019702002023号
      0
     
     
     
     

    0371-60135900
    7*24小时客服服务热线