存储引擎层如何通过 Handler API 与服务器层交互
你可以把 MySQL 想象成一家餐厅,这样更容易理解:
- 服务器层:就像餐厅的前台。它负责接待客人(接收连接)、理解菜单(解析SQL)、处理订单(优化查询)、安排上菜顺序(执行计划)等。
- 存储引擎层:就像餐厅的后厨。它负责具体存储食材(数据)、按照订单要求烹饪(读写数据)、管理冰箱空间(存储管理)。
- Handler API:就是连接前台和后厨的传菜通道和通信规范。前台不需要知道后厨是怎么做菜的(是用煤气灶还是电磁炉?),它只需要通过这个通道告诉后厨“来一份宫保鸡丁”,后厨做好了再通过这个通道传回来。
一、什么是 Handler API?
Handler API 是一组定义好的、抽象的接口(一组 C++ 的类和虚函数)。MySQL 服务器层通过这组接口来调用底层的各种存储引擎,而不需要关心存储引擎内部的具体实现。
它的核心作用是:解耦。
- 对服务器层来说:它只需要知道“我要打开一张表”、“我要读取下一行数据”、“我要在这里插入一条新记录”。它不关心数据是存储在 InnoDB 的 B+Tree 里,还是 MyISAM 的堆表里。
- 对存储引擎来说:它只需要实现 Handler API 规定的所有方法。只要实现了这组接口,任何存储引擎都可以“插拔”到 MySQL 中。这就是为什么 MySQL 可以同时支持 InnoDB、MyISAM、Memory、CSV 等多种存储引擎的原因。
二、交互流程与核心 API 方法详解
让我们跟随一条简单的 SQL 语句 SELECT * FROM








