MySQL 的帮助信息重要吗?不太重要!有用吗?有!就好比你在家洗澡的时候,突然有人不停地按你家的门铃,能把你憋出心脏病来,嘿嘿,我想,各位DBA同行们,在数据库的日常维护过程中,如果突然忘记某个SQL或者说某个管理命令如何拼写的时候,一定首先想到的就是使用"help xxx" 语句来查看MySQL 自带的帮助信息。但你一定或多或少能碰到这样的场景:记不清某个语句的具体拼写了,只能模糊的记得几个字母,或者说很清楚知道想要查什么帮助信息,但是却不知道用什么关键字来查询帮助信息(例如:想要查看解析relaylog的SQL语句)。这个时候怎么办呢? 别慌,本文来告诉你答案!

要想知道怎么办,那得全面了解MySQL 提供的帮助系统,下面,我们将带领大家一窥庐山真面目!

help 语句信息从哪里取的

MySQL Server提供4张表用于保存服务端的帮助信息(使用help语法查看的帮助信息),这些表位于mysql 系统字典库下。help 语句就是从这些表中获取数据并返回给客户端,如下:

  • help_category:关于帮助主题类别的信息

  • help_keyword:与帮助主题相关的关键字信息

  • help_relation:帮助关键字信息和主题信息之间的映射

  • help_topic:帮助主题的详细内容

help 语句信息何时产生的

这些表在数据库初始化时通过加载share/fill_help_tables.sql文件创建,如果是在Unix上使用二进制或源代码发行版安装MySQL,则在初始化数据目录时会直接导入该文件对帮助表内容进行初始化。对于在Linux上的RPM分发版或Windows上的二进制发行版,帮助表的内容初始化是作为MySQL安装过程的一部分执行。

  • 如果使用二进制发行版升级MySQL,则不会自动升级帮助表,但可以手动升级(手工加载share/fill_help_tables.sql文件),如:shell> mysql -u root mysql <fill_help_tables.sql

  • 您可以随时获取最新的fill_help_tables.sql以升级您的帮助表。从http://dev.mysql.com/doc/index-other.html下载适用于您的MySQL版本的正确文件

help 帮助信息存储表详解

help 语法支持3种模式的匹配查询:查看所有主题顶层类别或子类别、查看帮助主题下的关键字、使用给定主题下的唯一关键字查看帮助信息,这些信息分表保存在 help_category、help_topic、help_keyword表,help_relation表存放help_topic与help_keyword表中信息的映射信息。下面将针对这几张表的基础知识进行简单的科普。

(1)help_category

该表提供查询帮助主题的类别信息,每一个类别分别对应着N个帮助主题名或者主题子类别名,通过查询表中的信息我们也可以看出来,如下:

root@localhost : mysql 01:10:59> select * from help_category;
+------------------+-----------------------------------------------+--------------------+-----+
| help_category_id | name                                          | parent_category_id | url |
+------------------+-----------------------------------------------+--------------------+-----+
|                1 | Geographic                                    |                  0 |     |
|                2 | Polygon properties                            |                 35 |     |
......
|               39 | Functions                                     |                 36 |     |
|               40 | Data Definition                               |                 36 |     |
+------------------+-----------------------------------------------+--------------------+-----+
40 rows in set (0.00 sec)

表字段含义

  • help_category_id:帮助主题名称或子类别名称在表中的记录ID

  • name:帮助主题类别名称或字类别名称

  • parent_category_id:父主题类别名称在表中的记录ID,一些主题类别具有子主题类别,例如:绝大多数的主题类别其实是Contents类别的子类别(且是顶层类别,也是一级父类别),还有一部分是Geographic Features 类别的子类别(二级父类别),一部分是Functions的子类别(二级父类别)

  • url :对应在MySQL 官方手册中的链接地址

(2)help_keyword

该表提供查询与帮助主题相关的关键字字符串信息,如下:

root@localhost : mysql 01:12:07> select * from help_keyword limit 5;
+-----------------+---------+
| help_keyword_id | name    |
+-----------------+---------+
|             681 | (JSON   |
|             486 | ->      |
|             205 | ->>     |
|             669 | <>      |
|             521 | ACCOUNT |
+-----------------+---------+
5 rows in set (0.00 sec)

表字段含义

  • help_keyword_id:帮助关键字名称在表中记录对应的ID

  • name:帮助关键字字符串

(3)help_relation

该表提供查询帮助关键字信息和主题详细信息之间的映射,用于关联查询help_keyword与help_topic表,如下:

root@localhost : mysql 01:13:09> select * from help_relation limit 5;
+---------------+-----------------+
| help_topic_id | help_keyword_id |
+---------------+-----------------+
|             0 |               0 |
|           535 |               0 |
|           294 |               1 |
|           277 |               2 |
|             2 |               3 |
+---------------+-----------------+
5 rows in set (0.00 sec)

表字段含义

  • help_topic_id:帮助主题详细信息ID,该ID值与help_topic表中的help_topic_id相等

  • help_keyword_id:帮助主题关键字信息ID,该ID值与help_keyword表中的help_keyword_id相等

(4)help_topic

该表提供查询帮助主题给定关键字的详细内容(详细帮助信息),如下:

root@localhost : mysql 01:13:31> select * from help_topic limit 1\G;
*************************** 1. row ***************************
help_topic_id: 0name: JOIN
help_category_id: 28description: MySQL supports the following JOIN syntaxes for the table_references
part of SELECT statements and multiple-table DELETE and UPDATE
statements:
table_references:
escaped_table_reference [, escaped_table_reference] ...
escaped_table_reference:
table_reference
| { OJ table_reference }
......url: http://dev.mysql.com/doc/refman/5.7/en/join.html
1 row in set (0.00 sec)

表字段含义

  • help_topic_id:帮助主题详细信息在表记录中对应的ID

  • name:帮助主题给定的关键字名称,与help_keyword表中的name字段值相等

  • help_category_id:帮助主题类别ID,与help_category表中的help_category_id字段值相等

  • description:帮助主题的详细信息(这里就是我们通常查询帮助信息真正想看的内容,例如:告诉我们某某语句如何使用的语法与注意事项等)

  • example:帮助主题的示例信息(这里告诉我们某某语句如何使用的示例)

  • url:该帮助主题对应在MySQL官方在线手册中的URL链接地址

help 语句用法示例

前面我们提到过,help 语法支持3种模式的匹配查询。那么,回到文章开头我们抛出的问题,记不清某个语句的具体拼写了,只能模糊的记得几个字母,或者说很清楚知道想要查什么帮助信息,但是却不知道用什么关键字来查询帮助信息(例如:想要查看解析relaylog的SQL语句)。这个时候怎么办呢?

(1)我只记得某几个字母怎么办

MySQL 提供的帮助信息实际上可以直接给定一个主题关键字进行查询,不需要指定主题名称,如果你记录某个SQL子句关键字的其中的几个字母,那么可以使用这些字母多尝试几次,如下:

root@localhost : performance_schema 10:43:40> help relay  # 尝试第一次
Nothing found
Please try to run 'help contents' for a list of all accessible topics
root@localhost : performance_schema 10:44:00> help relay logs  # 尝试第二次
Nothing found
Please try to run 'help contents' for a list of all accessible topics
root@localhost : performance_schema 10:44:06> help relaylogs  # 尝试第三次
Nothing found
Please try to run 'help contents' for a list of all accessible topics
root@localhost : performance_schema 10:44:09> help relaylog  # 尝试第四次,oy,成功了
Name: 'SHOW RELAYLOG EVENTS'
Description:
Syntax:
SHOW RELAYLOG EVENTS
[IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]  # 原来是这样用的
Shows the events in the relay log of a replication slave. If you do not
specify 'log_name', the first relay log is displayed. This statement
has no effect on the master.
URL: http://dev.mysql.com/doc/refman/5.7/en/show-relaylog-events.html

PS:这里实际上就相当于那help 语句给定的关键字去匹配help_keyword表的name字段,如果有记录返回,则使用help_category、help_keyword、help_relation、help_topic四表做复杂的关联查询,右联结help_topic表中的name字段,如果返回唯一记录就返回帮助信息,如果返回多行,则返回一个关键字列表,使用这些具体的关键字可查询到具体的帮助信息,例如:

root@localhost : performance_schema 11:05:06> help where
.....
where <item> is one of the following
topics:  # 使用where作为关键字返回了一个关键字列表,表示where还会与这三个关键字组合使用,where的详细用法从列表中随便挑选一个关键字即可看到
DELETE
HANDLER
UPDATE
root@localhost : performance_schema 11:09:05> help delete
Name: 'DELETE'
Description:
Syntax:
DELETE is a DML statement that removes rows from a table.
Single-Table Syntax
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[PARTITION (partition_name,...)]
[WHERE where_condition]  # where关键字的用法在这里
[ORDER BY ...]
[LIMIT row_count]
......

(2)我啥都不记得怎么办

如果你啥都不记得,那就只能使用最笨的方法,地毯式查找

首先,我们就随便敲几个字母给help语句好了,例如:help xxx

root@localhost : performance_schema 10:09:49> help xxx;
Nothing found  # 这句告诉你帮助信息没找到
# 不要紧,下面这句告诉你,用help contents语句来列出所有的可能的帮助主题信息
Please try to run 'help contents' for a list of all accessible topics

然后,查看所有的主题类别

root@localhost : performance_schema 10:31:47> help contents
You asked for help about help category: "Contents"
For more information, type 'help <item>', where <item> is one of the following
categories:
Account Management
Administration  # 通过主题或主题类别名称,大致判定一下,查看relaylog事件内容的语句应该是属于管理语句
Compound Statements
Data Definition
Data Manipulation
Data Types
Functions
Functions and Modifiers for Use with GROUP BY
Geographic Features
Help Metadata
Language Structure
Plugins
Procedures
Storage Engines
Table Maintenance
Transactions
User-Defined Functions
Utility

使用help Administration 查看该帮助主题下的所有关键字

root@localhost : performance_schema 10:37:27> help Administration
......
SHOW PROCEDURE CODE
SHOW PROCEDURE STATUS
SHOW PROCESSLIST
SHOW PROFILE
SHOW PROFILES
SHOW RELAYLOG EVENTS  # 找到了,在这里
......

使用SHOW RELAYLOG EVENTS语句来查看具体的帮助信息

root@localhost : performance_schema 10:41:53> help SHOW RELAYLOG EVENTS
Name: 'SHOW RELAYLOG EVENTS'
Description:
Syntax:
SHOW RELAYLOG EVENTS
[IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]  # 原来是这样用的
Shows the events in the relay log of a replication slave. If you do not
specify 'log_name', the first relay log is displayed. This statement
has no effect on the master.
URL: http://dev.mysql.com/doc/refman/5.7/en/show-relaylog-events.html

OK,现在相信你已经比较清晰地了解了MySQL 帮助系统的组成以及help 到底能给我们提供一些什么帮助信息了,下面给大家再补充点小知识:

  • HELP语句中给定的搜索关键字不区分大小写

  • 搜索关键字可以包含通配符%和_,效果与LIKE运算符执行的模式匹配操作含义相同。例如:HELP 'rep%'返回以rep开头的主题列表

  • 如果帮助类别字符串、帮助主题字符串包含多个字符的,则可以使用引号引起来,也可以不使用引号,为避免歧义,最好使用引号引起来

帮助信息表相关的注意事项

对于参与复制的数据库实例,帮助表更新有一些注意事项。帮助表默认情况下会写入到binlog中(因为这些帮助表是跟版本匹配的,升级一个实例的版本,其他实例也有同步更新的必要),所以,你需要考虑是否需要在升级主库帮助表的时候同时把这些更新通过主库binlog同步更新到从库中。

  • 如果主从库版本不同,那么主从库就需要单独升级帮助信息表

  • 如果是MySQL 5.7.5之前的版本,则主从库分别升级帮助信息表使用命令:mysql --init-command="SET sql_log_bin=0" mysql < fill_help_tables.sql

  • 如果是MySQL 5.7.5 及其之后的版本,则不需要使用--init-command="SET sql_log_bin=0" ,因为fill_help_tables.sql文件中包含了SET sql_log_bin=0,所以主从库只需要分别执行命令:mysql mysql < fill_help_tables.sql 即可

  • 如果是主从版本相同,那么主从库可以通过在主库升级,通过复制来更新从库的帮助信息表

  • 如果是MySQL 5.7.5之前的版本,则只需要在主库中执行命令:mysql mysql < fill_help_tables.sql 即可

  • 如果是MySQL 5.7.5 及其之后的版本,则需要先在主库服务器中修改ll_help_tables.sql 文件,去掉SET sql_log_bin=0,然后在主库执行命令:mysql mysql < fill_help_tables.sql 即可

PS:在MySQL 5.7.5之前这些表使用MyISAM,在这个版本之后改为InnoDB引擎

| 作者简介

罗小波·沃趣科技高级数据库技术专家

IT从业多年,历任运维工程师,高级运维工程师,运维经理,数据库工程师,曾参与版本发布系统,轻量级监控系统,运维管理平台,数据库管理平台的设计与编写,熟悉MySQL的体系结构时,InnoDB存储引擎,喜好专研开源技术,追求完美。

MySQL 的 help 命令你真的会用吗?相关推荐

  1. MySQL数据库相关命令

    MySQL数据库 1.MySQL导出命令 mysqldump -h IP -u 用户名 -p 数据库名 > 导出的文件名 注:mysqldump命令是在cmd窗口初始目录下的命令,不是进入mys ...

  2. 怎么导入mysql示例_MySQL命令行导出导入数据库实例详解

    1,进入MysqL目录下的bin文件夹:cd MysqL中到bin文件夹的目录 如我输入的命令行:cd C:\Program Files\MysqL\MysqL Server 5.5\bin (或者直 ...

  3. mysql 参数sql文件_为MySQL的source命令导入SQL文件配置参数

    为MySQL的source命令导入SQL文件配置参数 执行 mysql -uroot -p 输入密码后进入 MySQL 命令提示符 set charset utf8; source /root/xxx ...

  4. MySQL数据库备份命令

    原文参考:MySQL数据库备份的命令 - 司南 mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql ...

  5. MySQL 数据库常用命令—where like union 排序 分组 连接

    引言 本篇博客对 MySQL 数据库的一些命令进行分享. where 语句 基本语法规则: select field1, field2,...fieldN from table_name1, tabl ...

  6. MySQL 数据库常用命令

    引言 在前面博客中,有提到用 mysql 作为数据库进行测试.在这里对 mysql 及其常用命令进行简单介绍,起到抛砖引玉的作用. MySQL 介绍 MySQL 是一个关系型数据库管理系统,由瑞典 M ...

  7. MySQL 数据库常用命令小结

    MySQL 数据库常用命令 1.MySQL常用命令 create database name; 创建数据库 use databasename; 选择数据库 drop database name 直接删 ...

  8. php mysql修改命令_PHP编程:mysql alter table命令修改表结构实例详解

    <PHP编程:mysql alter table命令修改表结构实例详解>要点: 本文介绍了PHP编程:mysql alter table命令修改表结构实例详解,希望对您有用.如果有疑问,可 ...

  9. cmd命令操作Mysql数据库,命令行操作Mysql

    你需要先安装Mysql数据库,其实就是安装Mysql数据库服务器,然后设置环境变量path,在cmd.exe里查询查看环境变量参数的命令是:path 第二步就是连接Mysql服务器,命令如下:mysq ...

  10. Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)

    这篇文章主要介绍了Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)的相关资料,需要的朋友可以参考下 在使用mysql运行某些语句时,会因数据量太大而导致死锁,没有反映.这个时候, ...

最新文章

  1. Spring中事务内部调用引发的惨案
  2. 实验一个最小的PYTHON服务器编程
  3. 浅谈用户体验的 4 个维度
  4. 在jenkins上配置Android项目(git管理,gradle构建)
  5. thinkcmf 横向排列数据_利用python进行数据分析之数据清洗规整
  6. 发现一篇不错的学习隐马尔可夫模型的文章
  7. Spring Aop(八)——advisor标签
  8. MyBatis【钢镚核恒】
  9. wso2 mysql_windows下 WSO2 Application Server配置 及 MySQL数据服务部署
  10. C#开发工控上位机编程 csdn_PLC部件分配编程PLC扩展如何编程
  11. 电脑录制视频的方法很简单 轻松录制完美视频
  12. 政考网:公务员考试备考攻略!
  13. 多品种+小批量生产计划方法
  14. 动态的渐变色网页背景
  15. 自然数 素数 质数_素数列表–最多20,000个素数的图表
  16. 【PS-海报】地产海报学习笔记
  17. 孩子学习计算机影响视力吗,影响孩子视力的3大原因,不是电脑!不是手机!...
  18. mongodb持久化
  19. 在外公网调阅公司内网资料文件【内网穿透】
  20. 计算机应用基础第二版中职教案,中职计算机应用基础教案.doc

热门文章

  1. 【Unity3D开发小游戏】《文字冒险游戏》Unity开发教程
  2. 【开发管理类软件必备知识视频教程之一】登录窗体前台注意事项
  3. LRU算法(有彩蛋)
  4. java applica_下列关于 Java Application 程序在结构上特点的描述中,错误的是 ()_实用英语2答案_学小易找答案...
  5. S32K144 EVB之FTM
  6. 三维光学测量技术在汽车设计及零部件制造过程中的应用
  7. 个人总结 - JS逆向解析
  8. 一、SQL语句执行过程
  9. excel表格怎么换行?3个方法,你一定不知道第3个
  10. 虚拟机跑服务器网速慢,VMware虚拟机上网速度慢怎么办-解决VMware打开网页缓慢的方法 - 河东软件园...