MySQL Shell 8.0  /  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 クエリーのみを受け入れます。