前几篇我们知道了 MySQL Shell 支持三种语言模式,但一次只能激活使用一种,模式自己决定。
在 MySQL Shell 的交互模式下运行。激活特定语言使用命令: \sql
,\js
,\py
在 MySQL Shell 的批处理模式下通过选项激活指定语言: --js
, --py
,--sql
,如果未指定则默认 Javascript。
shell> mysqlsh --sql < code.sql
shell> mysqlsh < code.js
shell> mysqlsh --py < code.py
在 MySQL Shell 8.0.16 中,可在另一种语言模式中执行单个 SQL 语句,执行后模式仍处于 py 或 js 模式。
mysql-py> \sql select * from sakila.actor limit 3;
在 MySQL Shell 8.0.18 中,可在任何语言状态执行操作系统命令
mysql-py> \system echo Hello from MySQL Shell!
看一段 MySQL Shell 8.0.18 (早期版本略有不同)中 Javascript 模式的代码。
准备测试环境,官网下载一个 world_x
示例库,有四张表可用,其中 countryinfo 为 JSON 结构:
shell> wget https://downloads.mysql.com/docs/world_x-db.tar.gz
shell> tar -xf world_x-db.tar.gz
shell> cd world_x-db
shell> mysql -uroot -p <world_x-db.sql
下载好后,做一些简单的 Javascript 模式操作,获取一条 countryinfo 的信息:
如上所示,对的调用 find()
后面是 execute()
函数。CRUD 数据库命令仅在 execute()
被调用时才在 MySQL 服务器上实际执行 。但是,当以交互方式使用 MySQL Shell 时,execute()
每当按下 Return 一条语句时都会隐式调用。然后,获取操作结果并显示在屏幕上。何时需要呼叫的规则 execute()
如下:
当以这种方式使用 MySQL Shell 时,在以下位置调用 execute()
成为可选的:
注意:world_x 示例库中,前三个在 getTables() 中获取到,countryinfo 在 getColections() 中,对前三张表可直接进行 Table 操作,对 JSON 结构表 countryinfo 需要进行 Collection 操作。
MySQL Shell 通过 Tab 键完成自动补全,目前支持以下对象:
在启动时 --no-name-cache
选项启动 mysqlsh
启动后可禁用参数 autocomplete.nameCache
和 devapi.dbObjectHandles
为 false
若启动时用选项 --no-name-cache
禁用,可以再将两个参数设置为 true
mysql-js> shell.options['autocomplete.nameCache']=true
mysql-js> shell.options['devapi.dbObjectHandles']=true
在 MySQL Shell 中支持操作的历史功能,使用向上和向下进行访问。可以使用 Ctrl+R 向后搜索,或 Ctrl+S 向前搜索。
选项 history.maxSize
为 MySQL Shell 的最大存储条数,默认为 1000 条轮替。
默认历史只能保存当前会话命令,全局不可见,退出后自动删除。可通过启用 history.autoSave
选项保存会话之间的历史记录。
mysqlsh-js> \option --persist history.autoSave=1
删除历史:
mysqlsh-js> \history del 2
mysqlsh-js> \history del 2-10
mysqlsh-js> \history del 2-
mysqlsh-js> \history del -10
JSON 模式有三种,分别是优化显示、行显示、数组显示三种
shell>echo "select * from world_x.city where countrycode='AUT'" | mysqlsh --json --sql --uri root@localhost:33060
or
shell>echo "select * from world_x.city where countrycode='AUT'" | mysqlsh --json=pretty --sql --uri root@localhost:33060
注意:提前设置好密码保存,尽量不要在命令历史中显示密码