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 時,只要您在陳述式上按下 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
模組中工作階段物件的交易處理和卸除函式:-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 查詢。