皆さんは、MySQLであのオプション何だったっけかなぁ?
ネットワークがつながっている場合はそういう対応もできますが、ネットワークにつながっていない場所で、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.
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_
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_
それぞれの件数から見てみると以下の通りになります。
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.