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() 函數。只有在呼叫 execute() 時,CRUD 資料庫命令才會實際在 MySQL 伺服器上執行。但是,當以互動方式使用 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 物件中包含的資訊會自動顯示在螢幕上。傳回 Result 物件的函數包括SQL 執行和 CRUD 操作 (如上所列)
-
在
mysql和mysqlx模組中,工作階段物件的交易處理和 drop 函數:-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 查詢。