最基本的存储引擎能实现只读表扫描功能。这类引擎可用于支持SQL日志查询、以及在MySQL之外填充的其他数据文件。
1.表扫描
store_lock()
- 在执行任何读取或写操作之前调用。
- 它将锁定添加到表锁定处理程序之前(请参见thr_lock.c),mysqld将用请求的锁调用存储锁定。
- 释放锁定时,也将调用该函数。
- 锁定类型定义于includes/thr_lock.h,
external_lock()- 是在事务开始时调用的,或发出LOCK TABLES语句时调用的,用于事务性存储引擎。
- 但大多数存储引擎简单地返回0(即未支持事务)
rnd_init()
- 在任何表扫描之前调用,用于为表扫描作准备,将计数器和指针复位为表的开始状态。
info()
- 执行表扫描操作之前调用,以便为优化程序提供额外信息。
- 优化程序所需的信息不是通过返回值给定的,你需填充存储引擎类的特定属性,当info()调用返回后,优化程序将读取存储引擎类。
- 除了供优化程序使用外,在调用info()函数期间,很多值集合还将用于SHOW TABLE STATUS语句。
extra()
- 执行某些操作之前调用,以便为存储引擎就如何执行特定操作予以提示。
- 额外调用中的提示实施不是强制性的,大多数存储引擎均返回0。
rnd_next()
- 完成表的初始化操作后调用,每两个扫描行调用1次,直至满足了服务器的搜索条件或到达文件结尾为止,在后一种情况下,处理程序将返回HA_ERR_END_OF_FILE。
2.表关闭
close()
- 当MySQL服务器完成表操作时调用,关闭文件指针并释放任何其他资源。
- 对于使用共享访问方法的存储引擎(如CSV引擎和其他示例引擎中显示的方法),必须将它们自己从共享结构中删除。
3.增加INSERT支持
write_row()- 所有的INSERT操作均是通过write_row()处理。
- 其工作为:从MySQL内部行格式获取数据,并将其写入数据文件
4.增加UPDATE支持
update_row()- 更新的执行取决于行格式和存储实施方式。某些存储引擎将替换恰当位置的数据,而其他实施方案则会删除已有的行,并在数据文件末尾添加新行。
- 接口为
- int ha_foo::update_row(const byte *old_data, byte *new_data)
- 非事务性存储引擎通常会忽略*old_data参数的内容,仅处理*new_data缓冲。事务性存储引擎可能需要比较缓冲,以确定在上次回滚中出现了什么变化。
5.增加DELETE支持
delete_row()
- MySQL服务器采用了与INSERT语句相同的方法来执行DELETE语句:服务器使用rnd_next()函数跳到要删除的行,然后调用delete_row()函数删除行。
- 接口为:
- int ha_foo::delete_row(const byte *buf)
- *buf参数包含要删除行的内容。对于大多数存储引擎,该参数可被忽略,但事务性存储引擎可能需要保存删除的数据,以供回滚操作使用。
阅读(683) | 评论(0) | 转发(0) |