日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql存储引擎使用教程_mysql教程:如何写MySQL存储引擎

發(fā)布時(shí)間:2023/12/2 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql存储引擎使用教程_mysql教程:如何写MySQL存储引擎 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在MySQL 5.1中開發(fā)一個(gè)存儲(chǔ)引擎已經(jīng)是比較方便了。所謂存儲(chǔ)引擎實(shí)際上是按照MySQL的約定,提供某些接口的實(shí)現(xiàn)而已,如MySQL插入一條記錄時(shí)將調(diào)用write_row方法,通過索引檢索時(shí)將調(diào)用index_read和index_next方法等。MySQL與存儲(chǔ)引擎之間的接口主要由兩個(gè)類/結(jié)構(gòu)約定,分別是在sql/handler.h中定義的handlerton結(jié)構(gòu)和handler類。handlerton結(jié)構(gòu)主要是約定事務(wù)操作接口,handler類主要約定表、索引及記錄操作接口。對(duì)不支持事務(wù)的存儲(chǔ)引擎只需要?jiǎng)?chuàng)建一個(gè)handler的派生類,并重載該引擎需要支持的方法。對(duì)于需要支持事務(wù)的存儲(chǔ)引擎,還需要實(shí)現(xiàn)handlerton結(jié)構(gòu)中指定的接口。

實(shí)現(xiàn)了存儲(chǔ)引擎本身功能后,還需要按一定格式“聲明”一下存儲(chǔ)引擎的存在。首先需要定義一個(gè)類型為st_mysql_storage_engine的變量,其值為MYSQL_HANDLERTON_INTERFACE_VERSION。如下所示:

struct st_mysql_storage_engine foo_storage_engine=

{ MYSQL_HANDLERTON_INTERFACE_VERSION };

然后需要用mysql_declare_plugin宏來給出存儲(chǔ)引擎的聲明,如下所示:

mysql_declare_plugin(foo)          /* foo為存儲(chǔ)引擎名稱 */

{

MYSQL_STORAGE_ENGINE_PLUGIN,

&foo_storage_engine,            /* 這里即為上面定義的st_mysql_storage_engine變量 */

"FOO",                        /* SHOW ENGINES中顯示的存儲(chǔ)引擎名稱 */

"Author Here",                  /* 作者名 */

"Foo storage engine",            /* SHOW ENGINES中顯示的存儲(chǔ)引擎說明 */

PLUGIN_LICENSE_GPL,

init_func,              /* 某函數(shù),將在加載存儲(chǔ)引擎時(shí)調(diào)用 */

done_func,              /* 某函數(shù),將在卸載存儲(chǔ)引擎時(shí)調(diào)用 */

0x0001 /* 版本號(hào)0.1 */,

NULL,                     /* status variables */

NULL,                     /* system variables */

NULL                     /* config options */

}

mysql_declare_plugin_end;

照此聲明后,在加載存儲(chǔ)引擎時(shí)MySQL將調(diào)用init_func函數(shù),此時(shí)會(huì)傳入一個(gè)handlerton變量,存儲(chǔ)引擎至少需要設(shè)置其中的 state、db_type、create、flags等屬性,其中create為一函數(shù)指針,將隨后被調(diào)用。若存儲(chǔ)引擎支持事務(wù),則還需要設(shè)置 handlerton中事務(wù)接口函數(shù)指針指向相應(yīng)的實(shí)現(xiàn)函數(shù)。

然后MySQL調(diào)用上面設(shè)置的create函數(shù),該函數(shù)中,存儲(chǔ)引擎實(shí)現(xiàn)者構(gòu)建一個(gè)該引擎對(duì)應(yīng)的handler派生類實(shí)例并返回給 MySQL。至此存儲(chǔ)引擎初始化過程完成,存儲(chǔ)引擎與MySQL之間的接口也已經(jīng)確定,此后MySQL即會(huì)在相應(yīng)的時(shí)刻調(diào)用handlerton結(jié)構(gòu)或 handler類約定的方法。

MySQL源代碼中的storage/example目錄給出了很好的示例,該目錄實(shí)現(xiàn)了一個(gè)“最小”的存儲(chǔ)引擎EXAMPLE,只是能加載進(jìn)來玩玩,不能用來存儲(chǔ)記錄。開發(fā)新的存儲(chǔ)引擎時(shí),最方便的方法也是拷貝一份example的代碼來改

總結(jié)

以上是生活随笔為你收集整理的mysql存储引擎使用教程_mysql教程:如何写MySQL存储引擎的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。