共计 7760 个字符,预计需要花费 20 分钟才能阅读完成。
丸趣 TV 小编给大家分享一下 MySQL 中 help 命令怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
01help 语句信息从哪里取的
MySQL Server 提供 4 张表用于保存服务端的帮助信息(使用 help 语法查看的帮助信息),这些表位于 mysql 系统字典库下。help 语句就是从这些表中获取数据并返回给客户端,如下:
help_category:关于帮助主题类别的信息
help_keyword:与帮助主题相关的关键字信息
help_relation:帮助关键字信息和主题信息之间的映射
help_topic:帮助主题的详细内容
02help 语句信息何时产生的
这些表在数据库初始化时通过加载 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 版本的正确文件
03help 帮助信息存储表详解
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: JOIN
help_category_id: 28
description: 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 链接地址
04help 语句用法示例
前面我们提到过,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 开头的主题列表
如果帮助类别字符串、帮助主题字符串包含多个字符的,则可以使用引号引起来,也可以不使用引号,为避免歧义,最好使用引号引起来
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 命令怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!