MySQL 外壳 8.0  / 第 5 章 MySQL Shell 代码执行  /  5.2 交互式代码执行

5.2 交互式代码执行

MySQL Shell 的默认模式提供交互式执行您在命令提示符下键入的数据库操作。这些操作可以用 JavaScript、Python 或 SQL 编写,具体取决于当前的第 5.1 节“活动语言”。执行时,操作结果显示在屏幕上。

与任何其他语言解释器一样,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 服务器上实际执行。但是,当以交互方式使用 MySQL Shell 时,execute()无论何时按下Return语句都会隐式调用。然后获取操作结果并显示在屏幕上。何时需要调用 execute()或不需要调用的规则如下:

  • 以这种方式使用 MySQL Shell 时,调用在以下情况下 execute()变为可选:

    • Collection.add()

    • Collection.find()

    • Collection.remove()

    • Collection.modify()

    • Table.insert()

    • Table.select()

    • Table.delete()

    • Table.update()

  • 如果将对象分配给变量,则自动执行将被禁用。在这种情况下execute() ,必须调用才能执行操作。

  • 当处理一行并且函数返回任何可用Result对象时,结果对象中包含的信息会自动显示在屏幕上。返回结果对象的函数包括:

    • SQL 执行和 CRUD 操作(上面列出)

    • mysql和 模块 中会话对象的事务处理和删除功能mysqlx:-

      • startTransaction()

      • commit()

      • rollback()

      • 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 查询。