MySQL源码 information_schema新增表

php中文网
发布: 2016-06-01 13:15:54
原创
1369人浏览过

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,完成本次查询

网趣购物系统加强升级版
网趣购物系统加强升级版

新版本程序更新主要体现在:完美整合BBS论坛程序,用户只须注册一个帐号,即可全站通用!采用目前流行的Flash滚动切换广告 变换形式多样,受人喜爱!在原有提供的5种在线支付基础上增加北京云网支付!对留言本重新进行编排,加入留言验证码,后台有留言审核开关对购物系统的前台进行了一处安全更新。在原有文字友情链接基础上,增加LOGO友情链接功能强大的6种在线支付方式可选,自由切换。对新闻列表进行了调整,

网趣购物系统加强升级版 0
查看详情 网趣购物系统加强升级版

processlist表需要的数据结构

     1. 字段列表

   
ST_FIELD_INFO processlist_fields_info[]={	{"ID", 4, MYSQL_TYPE_LONGLONG, 0, 0, "Id", SKIP_OPEN_TABLE},	{"USER", 16, MYSQL_TYPE_STRING, 0, 0, "User", SKIP_OPEN_TABLE},	{"HOST", LIST_PROCESS_HOST_LEN,MYSQL_TYPE_STRING, 0, 0, "Host", SKIP_OPEN_TABLE},	{"DB", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, "Db", SKIP_OPEN_TABLE},	{"COMMAND", 16, MYSQL_TYPE_STRING, 0, 0, "Command", SKIP_OPEN_TABLE},	{"TIME", 7, MYSQL_TYPE_LONG, 0, 0, "Time", SKIP_OPEN_TABLE},	{"STATE", 64, MYSQL_TYPE_STRING, 0, 1, "State", SKIP_OPEN_TABLE},	{"INFO", PROCESS_LIST_INFO_WIDTH, MYSQL_TYPE_STRING, 0, 1, "Info",	 SKIP_OPEN_TABLE},	{"TIME_MS", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONGLONG,	 0, 0, "Time_ms", SKIP_OPEN_TABLE},	{"ROWS_SENT", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONGLONG, 0,	 MY_I_S_UNSIGNED, "Rows_sent", SKIP_OPEN_TABLE},	{"ROWS_EXAMINED", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONGLONG, 0,	 MY_I_S_UNSIGNED, "Rows_examined", SKIP_OPEN_TABLE},	{"ROWS_READ", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONGLONG, 0,	 MY_I_S_UNSIGNED, "Rows_read", SKIP_OPEN_TABLE},	{0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}};
登录后复制

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},<br />    ......
登录后复制

其中, create_schema_table:用于构造临时表,

          processlist_fields_info:用于构造字段,

          fill_schema_processlist:用于填充数据。

这样添加一个新的表只需要添加三项内容:

  1.     定义字段信息,新增一个ST_FIELD_INFO 结构数组
  2.     新添加一个表,在schema_tables中添加一项内容
  3.     定义fill函数,填充数据
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号