• 検索結果がありません。

MySQL Shell オプションの構成

ドキュメント内 MySQL Shell 8.0 (ページ 33-189)

shell.reports では、組込みまたはユーザー定義の MySQL Shell レポートが関数として提供され、レポートの名前

が関数として使用されます。 セクション7.1「MySQL Shell でのレポート」を参照してください。

util には、アップグレードチェッカユーティリティ、JSON インポートユーティリティ、パラレルテーブルイン

ポートユーティリティなど、様々な MySQL Shell ツールが用意されています。 第8章「MySQL Shell ユーティリ ティ」を参照してください。

重要

MySQL Shell グローバルオブジェクトの名前はグローバル変数として予約されているため、

変数の名前などとして使用しないでください。 いずれかのグローバル変数を割り当てた場 合、前述の機能をオーバーライドし、リストアするには、MySQL Shell を再起動する必要が あります。

独自の拡張オブジェクトを作成し、追加の MySQL Shell グローバルオブジェクトとして登録して、グローバルコン テキストで使用できるようにすることもできます。 これを行う手順は、セクション7.2「MySQL Shell への拡張オブ ジェクトの追加」 を参照してください。

4.6 ページャの使用

less や more などの外部ページャツールを使用するように MySQL Shell を構成できます。 ページャを構成すると、オ

ンラインヘルプまたは SQL 操作の結果からテキストを表示するために MySQL Shell で使用されます。 次の構成の可 能性を使用します:

• ページングされた出力を表示する外部コマンドを指定する文字列である shell.options[pager] = "" MySQL Shell オプ ションを構成します。 この文字列には、外部ページャコマンドに渡されるコマンドライン引数をオプションで含め ることができます。 新しい値の正確性はチェックされません。 空の文字列を指定すると、ページャが無効になりま す。

デフォルト値: 文字列が空です。

• PAGER 環境変数を構成します。これは、shell.options["pager"]オプションのデフォルト値をオーバーライドしま す。 shell.options["pager"]が永続化されていた場合は、PAGER 環境変数よりも優先されます。

PAGER 環境変数は、MySQL Shell で想定されているのと同じコンテキストで Unix システムで一般的に使用され、

競合は発生しません。

--pager MySQL Shell オプションを構成します。これは、shell.options["pager"]オプションが永続化され、PAGER

環境変数が構成されている場合でも、このオプションの初期値をオーバーライドします。

\pager | \P command MySQL Shell コマンドを使用して、shell.options["pager"]オプションの値を設定します。 引数

を指定せずにコールした場合、shell.options["pager"]オプション (起動時に MySQL Shell が保持していたオプショ ン) の初期値をリストアします。 文字列は"文字でマークすることも、マークしないこともできます。 たとえば、

ページャを構成するには、次のようにします:

このページは機械翻訳したものです。

ページャの使用

• 初期ページャをリストアするには、command を渡さないか、空の文字列を渡してください

more コマンドをページャとして使用するように MySQL Shell を構成するには、more を渡します

more -10 を渡して、オプション -10 を指定して more コマンドをページャとして使用するように MySQL Shell を

構成

外部ページャツールに渡される MySQL Shell 出力は、フィルタリングなしで転送されます。 MySQL Shell で色付き プロンプトを使用している場合 (セクション10.3「プロンプトのカスタマイズ」 を参照)、出力には ANSI エスケープ シーケンスが含まれます。 一部のページャでは、-R オプションを使用して解釈を有効にできる less など、これらの エスケープシーケンスがデフォルトで解釈されない場合があります。more は、デフォルトで ANSI エスケープシーケ ンスを解釈します。

第 5 章 MySQL Shell コードの実行 目次

5.1 アクティブな言語 ... 31 5.2 対話型コードの実行 ... 32 5.3 コード自動補完 ... 33 5.4 コードの編集 ... 35 5.5 コード履歴 ... 35 5.6 バッチコード実行 ... 36 5.7 出力形式 ... 38 5.7.1 テーブル形式 ... 38 5.7.2 タブ区切り形式 ... 39 5.7.3 垂直フォーマット ... 39 5.7.4 JSON 形式の出力 ... 40 5.7.5 JSON ラッピング ... 41 5.7.6 結果メタデータ ... 42 5.8 API コマンドラインインタフェース ... 43 このセクションでは、MySQL Shell でのコード実行の仕組みについて説明します。

5.1 アクティブな言語

MySQL Shell では SQL、JavaScript または Python コードを実行できますが、一度にアクティブにできる言語は 1 つ のみです。 アクティブモードによって、実行されるステートメントの処理方法が決まります:

• SQL モードを使用している場合、ステートメントは SQL として処理され、実行のために MySQL サーバーに送信 されます。

• JavaScript モードを使用している場合、ステートメントは JavaScript コードとして処理されます。

• Python モードを使用している場合、ステートメントは Python コードとして処理されます。

注記

バージョン 8.0.18 から、MySQL Shell は Python 3 を使用します。 システムでサポートさ れている Python 3 のインストールを含むプラットフォームの場合、MySQL Shell では使 用可能な最新バージョンが使用され、サポートされている最小バージョンの Python 3.4.3 が使用されます。 Python 3 が含まれていないプラットフォームの場合、MySQL Shell に は Python 3.7.4 がバンドルされます。MySQL Shell は、Python 2.6 および Python 2.7 との コード互換性を維持しているため、これらの古いバージョンのいずれかが必要な場合は、適 切な Python バージョンを使用してソースから MySQL Shell をビルドできます。

MySQL Shell を対話モードで実行する場合は、次のコマンドを入力して特定の言語をアクティブ化します: \sql, \js,

\py。

MySQL Shell をバッチモードで実行する場合は、次のコマンドラインオプションのいずれかを渡して特定の言語をア クティブ化します: --js、--py または --sql。 何も指定されていない場合のデフォルトモードは JavaScript です。

MySQL Shell を使用して、ファイル code.sql のコンテンツを SQL として実行します。

shell> mysqlsh --sql < code.sql

MySQL Shell を使用して、ファイル code.js のコンテンツを JavaScript コードとして実行します。

shell> mysqlsh < code.js

MySQL Shell を使用して、ファイル code.py のコンテンツを Python コードとして実行します。

shell> mysqlsh --py < code.py

このページは機械翻訳したものです。

対話型コードの実行

MySQL Shell 8.0.16 から、\sql コマンドの直後に SQL ステートメントを入力することで、別の言語がアクティブなと きに単一の SQL ステートメントを実行できます。 例:

mysql-py> \sql select * from sakila.actor limit 3;

SQL ステートメントには追加の引用符は必要なく、ステートメントデリミタはオプションです。 このコマンドは、

単一行の単一の SQL クエリーのみを受け入れます。 この形式では、MySQL Shell は\sql コマンドを入力した場合の ようにはモードを切り替えません。 SQL ステートメントが実行されると、MySQL Shell は JavaScript または Python モードのままになります。

MySQL Shell 8.0.18 から、任意の言語がアクティブなときに、\system または\! コマンドの直後に実行するコマンド を入力することで、オペレーティングシステムコマンドを実行できます。 例:

mysql-py> \system echo Hello from MySQL Shell!

MySQL Shell は、オペレーティングシステムコマンドからの出力を表示するか、コマンドを実行できなかった場合は エラーを返します。

5.2 対話型コードの実行

MySQL Shell のデフォルトモードでは、コマンドプロンプトで入力したデータベース操作を対話形式で実行できま す。 これらの操作は、現在の セクション5.1「アクティブな言語」 に応じて、JavaScript、Python または SQL で記 述できます。 実行されると、操作の結果が画面に表示されます。

他の言語インタプリタと同様に、MySQL Shell は構文に関して非常に厳格です。 たとえば、次の JavaScript スニペッ トは、MySQL サーバーへのセッションを開き、コレクション内のドキュメントを読み取って出力します:

var mySession = mysqlx.getSession('user:pwd@localhost');

var result = mySession.getSchema('world_x').getCollection('countryinfo').find().execute();

var record = result.fetchOne();

while(record){

print(record);

record = result.fetchOne();

}

前述のように、find() へのコールの後に execute() 関数が続きます。 CRUD データベースコマンドは、実際には

execute() がコールされたときに MySQL Server でのみ実行されます。 ただし、MySQL Shell を対話形式で操作する

場合は、ステートメントで Return を押すたびに execute() が暗黙的にコールされます。 その後、操作の結果がフェッ チされ、画面に表示されます。 execute() をコールする必要があるかどうかのルールは、次のとおりです:

• この方法で MySQL Shell を使用する場合、execute() のコールはオプションになります:

Collection.add()

Collection.find()

Collection.remove()

Collection.modify()

Table.insert()

Table.select()

Table.delete()

Table.update()

• オブジェクトが変数に割り当てられている場合、自動実行は無効になります。 このような場合、操作を実行するに は execute() をコールする必要があります。

• 行が処理され、関数が使用可能な Result オブジェクトを返すと、結果オブジェクトに含まれる情報が画面に自動的 に表示されます。 Result オブジェクトを返す関数には、次のものがあります:

• SQL 実行および CRUD 操作 (前述)

複数行のサポート

mysql モジュールと mysqlx モジュールの両方のセッションオブジェクトのトランザクション処理および削除機

能:

-•

startTransaction()

コミット()

ロールバック()

dropSchema()

dropCollection()

ClassicSession.runSql()

前述のルールに基づいて、コレクション内のドキュメントのセッション、クエリーおよび印刷を確立するために対話 モードの MySQL Shell で必要なステートメントは次のとおりです:

mysql-js> var mySession = mysqlx.getSession('user:pwd@localhost');

mysql-js> mySession.getSchema('world_x').getCollection('countryinfo').find();

execute() をコールする必要はなく、Result オブジェクトが自動的に出力されます。

複数行のサポート

複数行にまたがるステートメントを指定できます。 Python または JavaScript モードでは、関数定義、if/then ステー トメント、for ループなどでステートメントのブロックが開始されると、複数行モードが自動的に有効になります。

SQL モードでは、コマンド\が発行されると、複数行モードが開始されます。

複数行モードが開始されると、その後に入力されるステートメントがキャッシュされます。

例:

mysql-sql> \

... create procedure get_actors() ... begin

... select first_name from sakila.actor;

... end ...

注記

クエリーで\sql コマンドを使用して、別の言語がアクティブなときに単一の SQL ステート メントを実行する場合、複数行モードは使用できません。 このコマンドは、単一行の単一の SQL クエリーのみを受け入れます。

5.3 コード自動補完

MySQL Shell では、「タブ」キーを押してカーソルの前のテキストの自動補完をサポートしています。 セクション 3.1「MySQL Shell のコマンド」 は、任意の言語モードで自動補完できます。 たとえば、\con と入力し、Tab キーを 押すと、\connect がオートコンプリートされます。 自動補完は、現在の セクション5.1「アクティブな言語」 に応じ て、SQL、JavaScript および Python 言語のキーワードに使用できます。

オートコンプリートでは、次のテキストオブジェクトがサポートされます:

• SQL モード - 自動補完では、現在アクティブなスキーマのスキーマ名、テーブル名、カラム名が認識されます。

• JavaScript および Python モードでは、自動補完はオブジェクトメンバーを認識します。次に例を示します:

session, db, dba, shell, mysql, mysqlx などのグローバルオブジェクト名。

session.connect()、dba.configureLocalInstance() などのグローバルオブジェクトのメンバー。

ドキュメント内 MySQL Shell 8.0 (ページ 33-189)