mysql存储引擎使用教程_mysql教程:如何写MySQL存储引擎
在MySQL 5.1中開發一個存儲引擎已經是比較方便了。所謂存儲引擎實際上是按照MySQL的約定,提供某些接口的實現而已,如MySQL插入一條記錄時將調用write_row方法,通過索引檢索時將調用index_read和index_next方法等。MySQL與存儲引擎之間的接口主要由兩個類/結構約定,分別是在sql/handler.h中定義的handlerton結構和handler類。handlerton結構主要是約定事務操作接口,handler類主要約定表、索引及記錄操作接口。對不支持事務的存儲引擎只需要創建一個handler的派生類,并重載該引擎需要支持的方法。對于需要支持事務的存儲引擎,還需要實現handlerton結構中指定的接口。
實現了存儲引擎本身功能后,還需要按一定格式“聲明”一下存儲引擎的存在。首先需要定義一個類型為st_mysql_storage_engine的變量,其值為MYSQL_HANDLERTON_INTERFACE_VERSION。如下所示:
struct st_mysql_storage_engine foo_storage_engine=
{ MYSQL_HANDLERTON_INTERFACE_VERSION };
然后需要用mysql_declare_plugin宏來給出存儲引擎的聲明,如下所示:
mysql_declare_plugin(foo) /* foo為存儲引擎名稱 */
{
MYSQL_STORAGE_ENGINE_PLUGIN,
&foo_storage_engine, /* 這里即為上面定義的st_mysql_storage_engine變量 */
"FOO", /* SHOW ENGINES中顯示的存儲引擎名稱 */
"Author Here", /* 作者名 */
"Foo storage engine", /* SHOW ENGINES中顯示的存儲引擎說明 */
PLUGIN_LICENSE_GPL,
init_func, /* 某函數,將在加載存儲引擎時調用 */
done_func, /* 某函數,將在卸載存儲引擎時調用 */
0x0001 /* 版本號0.1 */,
NULL, /* status variables */
NULL, /* system variables */
NULL /* config options */
}
mysql_declare_plugin_end;
照此聲明后,在加載存儲引擎時MySQL將調用init_func函數,此時會傳入一個handlerton變量,存儲引擎至少需要設置其中的 state、db_type、create、flags等屬性,其中create為一函數指針,將隨后被調用。若存儲引擎支持事務,則還需要設置 handlerton中事務接口函數指針指向相應的實現函數。
然后MySQL調用上面設置的create函數,該函數中,存儲引擎實現者構建一個該引擎對應的handler派生類實例并返回給 MySQL。至此存儲引擎初始化過程完成,存儲引擎與MySQL之間的接口也已經確定,此后MySQL即會在相應的時刻調用handlerton結構或 handler類約定的方法。
MySQL源代碼中的storage/example目錄給出了很好的示例,該目錄實現了一個“最小”的存儲引擎EXAMPLE,只是能加載進來玩玩,不能用來存儲記錄。開發新的存儲引擎時,最方便的方法也是拷貝一份example的代碼來改
總結
以上是生活随笔為你收集整理的mysql存储引擎使用教程_mysql教程:如何写MySQL存储引擎的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux c mysql教程_linu
- 下一篇: com/mysql/jdbc/sqler