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