MySQL Shell: Built-In Help
It can be hard to recall all the details of how a program and API work. The usual way to handle that is to look at the manual or a book. Another – and in my opinion – nice way is to have built-in help, so you can find the information without changing between the program and browser. This blog discuss how to obtain help when you use MySQL Shell.
MySQL Shell has a very nice and comprehensive built-in help. There is of course the help output produced using the --help
option if you invoke the shell from the command line:
PS: MySQL> mysqlsh --help
MySQL Shell 8.0.12
Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Usage: mysqlsh [OPTIONS] [URI]
mysqlsh [OPTIONS] [URI] -f <path> [script args...]
mysqlsh [OPTIONS] [URI] --dba [command]
mysqlsh [OPTIONS] [URI] --cluster
-?, --help Display this help and exit.
-e, --execute=<cmd> Execute command and quit.
-f, --file=file Process file.
--uri=value Connect to Uniform Resource Identifier. Format:
[user[:pass]@]host[:port][/db]
-h, --host=name Connect to host.
-P, --port=# Port number to use for connection.
...
However, this help is not what makes MySQL Shell special. It is the help that you can see from within the shell when working in JavaScript or Python that is the worth some extra attention. There is both support for general help and obtaining help through objects.
General Help
The first layer of help is what is also known from the old mysql
command-line client. A command existing of a backslash and a ?, h, or help (\?
, \h
or \help
) will show information about the general usage of MySQL Shell:
mysql-py> \?
The Shell Help is organized in categories and topics. To get help for a
specific category or topic use: \? <pattern>
The <pattern> argument should be the name of a category or a topic.
The pattern is a filter to identify topics for which help is required, it can
use the following wildcards:
- ? matches any single charecter.
- * matches any character sequence.
The following are the main help categories:
- AdminAPI Introduces to the dba global object and the InnoDB cluster
administration API.
- Shell Commands Provides details about the available built-in shell commands.
- ShellAPI Contains information about the shell and util global objects
as well as the mysql module that enables executing SQL on
MySQL Servers.
- SQL Syntax Entry point to retrieve syntax help on SQL statements.
- X DevAPI Details the mysqlx module as well as the capabilities of the
X DevAPI which enable working with MySQL as a Document Store
The available topics include:
- The dba global object and the classes available at the AdminAPI.
- The mysqlx module and the classes available at the X DevAPI.
- The mysql module and the global objects and classes available at the
ShellAPI.
- The functions and properties of the classes exposed by the APIs.
- The available shell commands.
- Any word that is part of an SQL statement.
SHELL COMMANDS
The shell commands allow executing specific operations including updating the
shell configuration.
The following shell commands are available:
- \ Start multi-line input when in SQL mode.
- \connect (\c) Connects the shell to a MySQL server and assigns the
global session.
- \exit Exits the MySQL Shell, same as \quit.
- \help (\?,\h) Prints help information about a specific topic.
- \history View and edit command line history.
- \js Switches to JavaScript processing mode.
- \nowarnings (\w) Don't show warnings after every statement.
- \option Allows working with the available shell options.
- \py Switches to Python processing mode.
- \quit (\q) Exits the MySQL Shell.
- \reconnect Reconnects the global session.
- \rehash Refresh the autocompletion cache.
- \source (\.) Loads and executes a script from a file.
- \sql Switches to SQL processing mode.
- \status (\s) Print information about the current global session.
- \use (\u) Sets the active schema.
- \warnings (\W) Show warnings after every statement.
GLOBAL OBJEECTS
The following modules and objects are ready for use when the shell starts:
- dba Used for InnoDB cluster administration.
- mysql Support for connecting to MySQL servers using the classic MySQL
protocol.
- mysqlx Used to work with X Protocol sessions using the MySQL X DevAPI.
- shell Gives access to general purpose functions and properties.
- util Global object that groups miscellaneous tools like upgrade checker.
For additional information on these global objects use: <object>.help()
EXAMPLES
\? AdminAPI
Displays information about the AdminAPI.
\? \connect
Displays usage details for the \connect command.
\? check_instance_configuration
Displays usage details for the dba.check_instance_configuration function.
\? sql syntax
Displays the main SQL help categories.
This shows which commands and global objects are available. But there is more: you can also get help about the usage of MySQL Shell such as how to use the Admin API (for MySQL InnoDB Cluster), how to connect, or the SQL syntax. The search for relevant help topics are context sensitive, for example searching for the word select return different results depending on the mode and whether you are connected:
- In Python or JavaScript mode without a connection, it is noted that information was found in the
mysqlx.Table.select
andmysqlx.TableSelect.select
categories. - In Python or JavaScript mode with a connection, the
SELECT
SQL statement is included as a category. - In SQL mode the actual help text for the
SELECT
SQL statement is returned (requires a connection).
For example, to get help about the select
method of a table object:
mysql-py> \? mysqlx.Table.select
NAME
select - Creates a TableSelect object to retrieve rows from the table.
SYNTAX
Table.select(...)
[.where([expression])]
[.group_by(...)[.having(condition)]]
[.order_by(...)]
[.limit(numberOfRows)[.offset(numberOfRows)]]
[.lock_shared([lockContention])]
[.lock_exclusive([lockContention])]
[.bind(name, value)]
[.execute()]
DESCRIPTION
This function creates a TableSelect object which is a record selection
handler.
This handler will retrieve all the columns for each included record.
The TableSelect class has several functions that allow specifying what
records should be retrieved from the table, if a searchCondition was
specified, it will be set on the handler.
The selection will be returned when the execute function is called on the
handler.
...
To get help for the SELECT
SQL statement:
mysql-py> \? SQL Syntax/SELECT
Syntax:
SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr [, select_expr ...]
[FROM table_references
[PARTITION partition_list]
[WHERE where_condition]
[GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[HAVING where_condition]
[WINDOW window_name AS (window_spec)
[, window_name AS (window_spec)] ...]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[INTO OUTFILE 'file_name'
[CHARACTER SET charset_name]
export_options
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name]]
[FOR UPDATE | LOCK IN SHARE MODE]]
[FOR {UPDATE | SHARE} [OF tbl_name [, tbl_name] ...] [NOWAIT | SKIP LOCKED]
| LOCK IN SHARE MODE]]
SELECT is used to retrieve rows selected from one or more tables, and
can include UNION statements and subqueries. See [HELP UNION], and
http://dev.mysql.com/doc/refman/8.0/en/subqueries.html. A SELECT
statement can start with a WITH clause to define common table
expressions accessible within the SELECT. See
http://dev.mysql.com/doc/refman/8.0/en/with.html.
...
URL: http://dev.mysql.com/doc/refman/8.0/en/select.html
mysql-py> \sql
Switching to SQL mode... Commands end with ;
mysql-sql> \? select
Syntax:
SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr [, select_expr ...]
[FROM table_references
[PARTITION partition_list]
[WHERE where_condition]
[GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[HAVING where_condition]
[WINDOW window_name AS (window_spec)
[, window_name AS (window_spec)] ...]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[INTO OUTFILE 'file_name'
[CHARACTER SET charset_name]
export_options
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name]]
[FOR UPDATE | LOCK IN SHARE MODE]]
[FOR {UPDATE | SHARE} [OF tbl_name [, tbl_name] ...] [NOWAIT | SKIP LOCKED]
| LOCK IN SHARE MODE]]
SELECT is used to retrieve rows selected from one or more tables, and
can include UNION statements and subqueries. See [HELP UNION], and
http://dev.mysql.com/doc/refman/8.0/en/subqueries.html. A SELECT
statement can start with a WITH clause to define common table
expressions accessible within the SELECT. See
http://dev.mysql.com/doc/refman/8.0/en/with.html.
...
Note here how it is possible to get the help for the SELECT
statement both from the Python (and JavaScript) as well as SQL modes, but the search term is different.
When you use the JavaScript or Python modes there is another way to get help based on your object. Let's look at that.
Object Based Help
If you are coding in MySQL Shell using JavaScript or Python it may happen you need a hint how to use a given object, for example a table object. You can use the method described in the previous section to get help by searching for mysqlx.Table
, however, you can also access the help directly from the object.
All of the X DevAPI objects in MySQL Shell has a help()
method that you can invoke to have help returned for the object. For example, if you have an object named city
for the city
table in the world
schema, then calling city.help()
returns information about table object:
mysql-py> \use world
Default schema `world` accessible through db.
mysql-py> city = db.get_table('city')
mysql-py> city.help()
NAME
Table - Represents a Table on an Schema, retrieved with a session created
using mysqlx module.
DESCRIPTION
Represents a Table on an Schema, retrieved with a session created using
mysqlx module.
PROPERTIES
name
The name of this database object.
schema
The Schema object of this database object.
session
The Session object of this database object.
FUNCTIONS
delete()
Creates a record deletion handler.
exists_in_database()
Verifies if this object exists in the database.
get_name()
Returns the name of this database object.
get_schema()
Returns the Schema object of this database object.
get_session()
Returns the Session object of this database object.
help([member])
Provides help about this class and it's members
insert(...)
Creates TableInsert object to insert new records into the table.
is_view()
Indicates whether this Table object represents a View on the
database.
select(...)
Creates a TableSelect object to retrieve rows from the table.
update()
Creates a record update handler.
As you can see, the built-in help in MySQL Shell is a powerful resource. Make sure you use it.
0 Comments on “MySQL Shell: Built-In Help”