Chinaunix首页 | 论坛 | 博客
  • 博客访问: 400323
  • 博文数量: 87
  • 博客积分: 2571
  • 博客等级: 少校
  • 技术积分: 920
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-29 13:10
文章分类

全部博文(87)

文章存档

2012年(49)

2011年(7)

2010年(26)

2009年(5)

分类: Mysql/postgreSQL

2012-03-10 18:59:53


最基本的存储引擎能实现只读表扫描功能。这类引擎可用于支持SQL日志查询、以及在MySQL之外填充的其他数据文件。


1.表扫描

store_lock()

点击(此处)折叠或打开

  1. 在执行任何读取或写操作之前调用。
  2. 它将锁定添加到表锁定处理程序之前(请参见thr_lock.c),mysqld将用请求的锁调用存储锁定。
  3. 释放锁定时,也将调用该函数。
  4. 锁定类型定义于includes/thr_lock.h,

external_lock()

点击(此处)折叠或打开

  1. 是在事务开始时调用的,或发出LOCK TABLES语句时调用的,用于事务性存储引擎。
  2. 但大多数存储引擎简单地返回0(即未支持事务)

rnd_init()

点击(此处)折叠或打开

  1. 在任何表扫描之前调用,用于为表扫描作准备,将计数器和指针复位为表的开始状态。

info()

点击(此处)折叠或打开

  1. 执行表扫描操作之前调用,以便为优化程序提供额外信息。
  2. 优化程序所需的信息不是通过返回值给定的,你需填充存储引擎类的特定属性,当info()调用返回后,优化程序将读取存储引擎类。
  3. 除了供优化程序使用外,在调用info()函数期间,很多值集合还将用于SHOW TABLE STATUS语句。

extra()

点击(此处)折叠或打开

  1. 执行某些操作之前调用,以便为存储引擎就如何执行特定操作予以提示。
  2. 额外调用中的提示实施不是强制性的,大多数存储引擎均返回0。

rnd_next()

点击(此处)折叠或打开

  1. 完成表的初始化操作后调用,每两个扫描行调用1次,直至满足了服务器的搜索条件或到达文件结尾为止,在后一种情况下,处理程序将返回HA_ERR_END_OF_FILE。

2.表关闭
close()

点击(此处)折叠或打开

  1. 当MySQL服务器完成表操作时调用,关闭文件指针并释放任何其他资源。
  2. 对于使用共享访问方法的存储引擎(如CSV引擎和其他示例引擎中显示的方法),必须将它们自己从共享结构中删除。

3.增加INSERT支持
write_row()

点击(此处)折叠或打开

  1. 所有的INSERT操作均是通过write_row()处理。
  2. 其工作为:从MySQL内部行格式获取数据,并将其写入数据文件

4.增加UPDATE支持
update_row()

点击(此处)折叠或打开

  1. 更新的执行取决于行格式和存储实施方式。某些存储引擎将替换恰当位置的数据,而其他实施方案则会删除已有的行,并在数据文件末尾添加新行。
  2. 接口为
  3. int ha_foo::update_row(const byte *old_data, byte *new_data)
  4. 非事务性存储引擎通常会忽略*old_data参数的内容,仅处理*new_data缓冲。事务性存储引擎可能需要比较缓冲,以确定在上次回滚中出现了什么变化。

5.增加DELETE支持
delete_row()

点击(此处)折叠或打开

  1. MySQL服务器采用了与INSERT语句相同的方法来执行DELETE语句:服务器使用rnd_next()函数跳到要删除的行,然后调用delete_row()函数删除行。
  2. 接口为:
  3. int ha_foo::delete_row(const byte *buf)
  4. *buf参数包含要删除行的内容。对于大多数存储引擎,该参数可被忽略,但事务性存储引擎可能需要保存删除的数据,以供回滚操作使用。













阅读(683) | 评论(0) | 转发(0) |
0

上一篇:linxu开发点滴

下一篇:学习记录

给主人留下些什么吧!~~