千家信息网

MySQL中help命令怎么用

发表于:2024-09-25 作者:千家信息网编辑
千家信息网最后更新 2024年09月25日,小编给大家分享一下MySQL中help命令怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!01help 语句信息从哪里
千家信息网最后更新 2024年09月25日MySQL中help命令怎么用

小编给大家分享一下MySQL中help命令怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

01

help 语句信息从哪里取的

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

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

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

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

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

02

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以升级您的帮助表。从http://dev.mysql.com/doc/index-other.html下载适用于您的MySQL版本的正确文件

03

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: 0        name: JOINhelp_category_id: 28 description: MySQL supports the following JOIN syntaxes for the table_referencespart of SELECT statements and multiple-table DELETE and UPDATEstatements: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.html1 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链接地址

04

help 语句用法示例

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

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

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

root@localhost : performance_schema 10:43:40> help relay  # 尝试第一次Nothing foundPlease try to run 'help contents' for a list of all accessible topicsroot@localhost : performance_schema 10:44:00> help relay logs  # 尝试第二次Nothing foundPlease try to run 'help contents' for a list of all accessible topicsroot@localhost : performance_schema 10:44:06> help relaylogs  # 尝试第三次Nothing foundPlease try to run 'help contents' for a list of all accessible topicsroot@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 notspecify 'log_name', the first relay log is displayed. This statementhas 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  is one of the followingtopics:  # 使用where作为关键字返回了一个关键字列表,表示where还会与这三个关键字组合使用,where的详细用法从列表中随便挑选一个关键字即可看到DELETEHANDLERUPDATEroot@localhost : performance_schema 11:09:05> help deleteName: 'DELETE'Description:Syntax:DELETE is a DML statement that removes rows from a table.Single-Table SyntaxDELETE [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 contentsYou asked for help about help category: "Contents"For more information, type 'help ', where  is one of the followingcategories:Account ManagementAdministration  # 通过主题或主题类别名称,大致判定一下,查看relaylog事件内容的语句应该是属于管理语句Compound StatementsData DefinitionData ManipulationData TypesFunctionsFunctions and Modifiers for Use with GROUP BYGeographic FeaturesHelp MetadataLanguage StructurePluginsProceduresStorage EnginesTable MaintenanceTransactionsUser-Defined FunctionsUtility

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

root@localhost : performance_schema 10:37:27> help Administration......SHOW PROCEDURE CODESHOW PROCEDURE STATUSSHOW PROCESSLISTSHOW PROFILESHOW PROFILESSHOW RELAYLOG EVENTS  # 找到了,在这里......

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

root@localhost : performance_schema 10:41:53> help SHOW RELAYLOG EVENTSName: '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 notspecify 'log_name', the first relay log is displayed. This statementhas 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开头的主题列表

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

05

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

对于参与复制的数据库实例,帮助表更新有一些注意事项。帮助表默认情况下会写入到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 即可

以上是"MySQL中help命令怎么用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0