MySQL基礎之使用遊標
阿新 • • 發佈:2020-08-04
遊標
使用簡單的SELECT語句, 沒有辦法得到第一行、下一行、或前10行, 也不存在每次一行地處理所有行的簡單方法
有時候, 需要在檢索出來的行中前進或後退一行或多行。這就是使用遊標的原因。遊標是一個儲存在MySQL伺服器上的資料庫查詢, 它不是一條SELECT語句, 而是被該語句檢索出來的結果集。在儲存了遊標之後, 應用程式可以根據需要滾動或瀏覽其中的內容
遊標主要使用者互動式應用, 其中使用者需要滾動螢幕上的資料, 並對資料進行瀏覽或作出更改
MySQL的遊標只能使用者儲存過程(和函式)
使用遊標
使用遊標有幾個明確的步驟
- 在能夠使用遊標之前, 必須宣告它。這個過程實際上沒有檢索資料, 它只是定義要使用的SELECT語句
- 一旦聲明後, 必須開啟遊標以供使用
- 對於填有資料的遊標, 根據需要取出(檢索)各行
- 在結束遊標使用時, 必須關閉遊標
建立遊標
遊標用DECLARE語句建立。DECLARE命名遊標, 並定義相應的SELECT語句, 根據需要帶WHERE和其他子句。
MariaDB [crashcourse]> DELIMITER $ MariaDB [crashcourse]> CREATE PROCEDURE productorders() -> BEGIN -> DECLARE ordernumbers CURSOR FOR SELECT order_num FROMorders; -> END $
儲存過程處理完後, 遊標就消失, 因為它侷限於儲存過程。
開啟和關閉遊標
遊標用OPEN CURSOR語句來開啟
MariaDB [crashcourse]> OPEN ordernumbers;
在處理OPEN語句時執行查詢, 儲存檢索出的資料以供瀏覽和滾動。
遊標處理完後, 應當使用如下語句關閉遊標
MariaDB [crashcourse]> CLOSE ordernumbers;
CLOSE釋放遊標使用的所有內部記憶體和資源, 因此在每個遊標不再需要時應該關閉。
在一個遊標關閉後, 如果沒有重新開啟, 則不能使用它了。但是, 使用宣告過的遊標不需要再次宣告, 用OPEN開啟它就可以了
MariaDB [crashcourse]> DELIMITER $ MariaDB [crashcourse]> CREATE PROCEDURE productorders() -> BEGIN -> -- Declare the cursor -> DECLARE ordernumbers CURSOR FOR SELECT order_num FROM orders; -> -> -- Open the cursor -> OPEN ordernumbers; -> -> --Close the cursor -> CLOSE ordernumbers; -> END $
使用遊標資料
在一個遊標被開啟後, 可以使用FETCH語句分別訪問它的每一行。FETCH指定檢索什麼資料(所需的列), 檢索出來的資料儲存在什麼地方。它還向前移動遊標中的內部行指標, 使下一條FETCH語句檢索下一行
MariaDB [crashcourse]> DELIMITER $ MariaDB [crashcourse]> CREATE PROCEDURE productorders() -> BEGIN -> -> --Declare local variables -> DECLARE o INT; -> -> -- Declare the cursor -> DECLARE ordernumbers CURSOR FOR SELECT order_num FROM orders; -> -> -- Open the cursor -> OPEN ordernumbers; -> -> -- Get order number -> FETCH ordernumbers INTO o -> -> --Close the cursor -> CLOSE ordernumbers; -> -> END $
FETCH用來檢索當前行的order_num列(將自動從第一行開始)到一個名為o的區域性宣告的變數中。對檢索出來的資料不做任何出來