10bet网址
MySQL内部手册


MySQL内部手册/编写自定义存储引擎/增加对存储引擎UPDATE的支持

23.13增加存储引擎UPDATE支持

MySQL服务器执行更新语句,执行(表/索引/范围/等)扫描,直到找到与在哪里条款的更新语句,然后调用[custom-engine.html#custom-engine-api-reference-update_row .htmlupdate_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大小;DBUG_ENTER(“ha_tina:: update_row”);statistic_increment(表- > in_use - > status_var。ha_read_rnd_next_count &LOCK_status);if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_UPDATE) table->timestamp_field->set_time();大小= encode_quote (new_data);如果(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);}

请注意前一个示例中的时间戳设置。