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