您的位置:首页 > 博客中心 > 数据库 >

MySQL源码 information_schema新增表

时间:2022-03-10 17:05

  information_schema是MySQL下的DB, 存储了数据库的数据字典,但OS系统上,并没有information_schema下表的数据和结构文件。

所以,MySQL在针对information_schema下的表进行查询的时候,在内存中构造了memory引擎的临时表,把数据填充进去,最后返回给client。       下面看下我们如何来增加一个information_schema下的表,统计一下你想要的信息,供实时查询:   比如select * from information_schema.processlist这样的查询发送给server:   需要两个步骤:   步骤1:构造临时表      在execute_sqlcom_select函数中,所有的select语句,都需要open_and_lock_table,当发现这个 if (tables->schema_table)是schema_table的时候,就是创建临时表,进入sql/sql_show.cc文件中的create_schema_table函数以完成临时表的创建。   步骤2:构造数据      在真正执行select语句,进入handle_select的时候,在JOIN::EXEC的时候,进入get_schema_tables_result函数,最后调用fill_schema_processlist来完成数据加载。   步骤3:最后返回数据给client,完成本次查询   processlist表需要的数据结构        1. 字段列表     gxlsystem.com,布布扣

 

2. processlist表信息  
     ST_SCHEMA_TABLE schema_tables[]=
       {"PROCESSLIST", processlist_fields_info, create_schema_table,fill_schema_processlist, make_old_format, 0, -1, -1, 0, 0},
    ......
其中, create_schema_table:用于构造临时表,           processlist_fields_info:用于构造字段,           fill_schema_processlist:用于填充数据。   这样添加一个新的表只需要添加三项内容:
  1.     定义字段信息,新增一个ST_FIELD_INFO 结构数组
  2.     新添加一个表,在schema_tables中添加一项内容
  3.     定义fill函数,填充数据

 

MySQL源码 information_schema新增表,布布扣,bubuko.com

热门排行

今日推荐

热门手游