MySQL道普請便り

第188回あれなんだっけ?って時に使えるMySQLのHELP構文

皆さんは、MySQLであのオプション何だったっけかなぁ?って思った時、何をするでしょうか? ちょっと前の話になってしまいますが、Oracle社公式のMySQL 8.0 リファレンスマニュアルが日本語化されたので、こちらを見る人が多いのかと思いますが、さまざまな先人の知識を得るために、Googleなどの検索エンジンで検索をする場合もあるかもしれません。

ネットワークがつながっている場合はそういう対応もできますが、ネットワークにつながっていない場所で、MySQLのバイナリがあるのに検索ができないなんて事が起こるかもしれません。そんな時に知っておくと、ちょっと役に立つかもしれないHELP構文に関して紹介していこうと思います。

検証環境

今回はdockerで建てたMySQLを使用します。以下のコマンドでdockerを建てて、ローカルからアクセスをします。

% docker run --platform linux/x86_64 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest

アクセス方法は以下の通りです。

% mysql -uroot -pmy-secret-pw -h127.0.0.1 -P3307

MySQLは執筆時点では、以下の通り8.0.31を使用しています。

mysql>  select version();
+-----------+
| version() |
+-----------+
| 8.0.31    |
+-----------+
1 row in set (0.01 sec)

HELP構文に関して

それでは、MySQLに接続をしてみてさっそく使ってみましょう。とはいえ、使い方を忘れてしまった…なんて事もあるかもしれません。そんなときは、とりあえずhelpと打ち込んでみましょう。

mysql> help

すると、いくつかブロックに別れて表示がされます。最初に表示されるのが、ネット上でのサービスはここを見てほしいというブロックです。MySQLに関するURLを表示してくれます。

For information about MySQL products and services, visit:
   http://www.mysql.com/
For developer information, including the MySQL Reference Manual, visit:
   http://dev.mysql.com/
To buy MySQL Enterprise support, training, or other products, visit:
   https://shop.mysql.com/

続いてクライアントで使えるコマンドを表示してくれます。普段使うようなexitや本連載の第6回 mysqlコマンドラインクライアントにページャーを指定する で紹介したpagerなどが表示されます。

List of all MySQL commands:
Note that all text commands must be first on line and end with ';'《中略》
exit      (\q) Exit mysql. Same as quit.
《中略》
pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER.
《省略》

最後に表示されている1行が今回のHELP構文のものになります。

For server side help, type 'help contents'

HELP構文を実行してみる

長くなりましたが、実際に実行してみようと思います。先ほどの最後にかかれていたhelp contentsを実行してみましょう。

mysql> 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
   Components
   Compound Statements
   Contents
   Data Definition
   Data Manipulation
   Data Types
   Functions
   Geographic Features
   《省略》

長すぎるので一部省略させていただきましたが、上記のように登録されているカテゴリーが表示されます。それぞれに関してもっと詳しく知りたい場合そのカテゴリーを指定してHELP構文を実行していきます。今回はData Typesについて調べたいとすると、以下のようになります。複数の単語に分かれる場合は文字列として扱えるように「'」「"」で囲ってあげましょう。

mysql> help 'Data Types'
You asked for help about help category: "Data Types"
For more information, type 'help <item>', where <item> is one of the following
topics:
   AUTO_INCREMENT
   BIGINT
   BINARY
   BIT
   BLOB
   BLOB DATA TYPE
   BOOLEAN
   CHAR
《省略》

上記のように使用できる型が一覧で確認できます。さらに、たとえばAUTO_INCREMENTについて知りたいとすれば、以下のように試せば確認ができます。

mysql> help 'AUTO_INCREMENT'
Name: 'AUTO_INCREMENT'
Description:
The AUTO_INCREMENT attribute can be used to generate a unique identity
for new rows:

URL: https://dev.mysql.com/doc/refman/8.0/en/example-auto-increment.html

Examples:
CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
);

INSERT INTO animals (name) VALUES
    ('dog'),('cat'),('penguin'),
    ('lax'),('whale'),('ostrich');

SELECT * FROM animals;

上記のように調べたいものが漠然としている場合は、help contentsから始めて見ると良いと思います。

それ以外でも、たとえば見たことが無い演算子があった場合などに、この記号は何なのか、どういう意味なのか知りたい場合などがあると思います。たとえば「&」があった倍にこれはどういう演算子なのか気になった場合は、以下のように調べられます。

mysql> help '&'
Name: '&'
Description:
Syntax:
&

Bitwise AND.

The result type depends on whether the arguments are evaluated as
binary strings or numbers:
《中略》

For more information, see the introductory discussion in this section.

URL: https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html

Examples:
mysql> SELECT 29 & 15;
        -> 13
mysql> SELECT HEX(_binary X'FF' & b'11110000');
        -> 'F0'

このように、1文字の記号などの検索エンジンで探すのが非常に難しい演算子を簡単に探せる、というところに個人的に非常に価値があるかなと思います。topicも詳細に書かれていますが、リファレンスマニュアルの該当の箇所へのリンクが用意されていたり、Examplesでどういう挙動なのか説明されていて非常にわかりやすいと思います。

また、他の構文同様にあいまい検索もできて、%を使用すると曖昧な検索を行ってくれます。

mysql> help '%DATA'
Name: 'LOAD DATA'
Description:
Syntax:
《省略》

HELP構文の中身

HELP構文で使用されるテーブルの中身は、mysqlデータベース内のいかのテーブルにマッピングされて保存されています。

mysql> show tables like 'help%';
+-------------------------+
| Tables_in_mysql (help%) |
+-------------------------+
| help_category           |
| help_keyword            |
| help_relation           |
| help_topic              |
+-------------------------+
4 rows in set (0.02 sec)

名は体を表すと言いますが、help_categoryにはヘルプのカテゴリーに関する情報が入っています。help_keywordには、ヘルプのキーワードが入っていて、help_topicにはヘルプの実体が入っています。 help_relationはhelp_keywordとhelp_topicの関連を紐付けるための中間テーブルとなっています。それぞれ中身を軽く確認してみましょう。

それぞれの件数から見てみると以下の通りになります。

mysql> use mysql
mysql> select COUNT(*) FROM help_category;
+----------+
| COUNT(*) |
+----------+
|       53 |
+----------+

mysql> select COUNT(*) FROM help_keyword;
+----------+
| COUNT(*) |
+----------+
|      985 |
+----------+

mysql> select COUNT(*) FROM help_topic;
+----------+
| COUNT(*) |
+----------+
|      701 |
+----------+

このようにcategoryは53件、keywordは985件、topicは701件登録されていることがわかります。

まとめ

今回は、MySQLサーバ内で検索ができるHELP構文に関して紹介させていただきました。MySQL 8.0系の比較的新しいバージョンをご利用の場合は、MySQLを起動することができれば、ネットワークの有無にかかわらず手元で簡単に調べられるので、普段の環境と違う場所に出張する場合などや、開発時にブラウザに切り替えてしまい気がついたら広大なネットの海でサーフィンしてしまうような場合には、頭の片隅に覚えておくと良いかもしれません。また、1文字の記号などの検索エンジンで引っかかりにくい文字列を調べたい場合にも、ぜひ活用してみてください。

おすすめ記事

記事・ニュース一覧