溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

mysql函數(shù)中可不可以用游標

發(fā)布時間:2022-06-14 09:37:41 來源:億速云 閱讀:385 作者:zzz 欄目:MySQL數(shù)據(jù)庫

這篇“mysql函數(shù)中可不可以用游標”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“mysql函數(shù)中可不可以用游標”文章吧。

mysql函數(shù)中可以用游標。在mysql中,游標只能用于存儲過程和函數(shù);存儲過程或函數(shù)中的查詢有時會返回多條記錄,而使用簡單的SELECT語句,沒有辦法得到第一行、下一行或前十行的數(shù)據(jù),這時可以使用游標來逐條讀取查詢結(jié)果集中的記錄。使用游標可以對檢索出來的數(shù)據(jù)進行前進或者后退操作,主要用于交互式應(yīng)用,如用戶滾動屏幕上的數(shù)據(jù)。

mysql函數(shù)中可不可以用游標

本教程操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。

mysql函數(shù)中可以用游標。

游標:也稱為光標,是一個存儲在DBMS服務(wù)器上的數(shù)據(jù)庫查詢,它不是一條select語句,而是被該語句檢索出來的結(jié)果集。

游標的用途:對檢索出來的數(shù)據(jù)進行前進或者后退操作,主要用于交互式應(yīng)用,如用戶滾動屏幕上的數(shù)據(jù)

游標的特性:

  • 能夠標記游標為只讀,使數(shù)據(jù)能讀取,但不能更新和刪除

  • 能控制可以執(zhí)行的定向操作(向前、向后、第一、最后、絕對位置、相對位置等)

  • 能標記某些列為可編輯的,某些列為不可編輯的

  • 規(guī)定范圍,使游標對創(chuàng)建它的特定請求(如存儲過程)或?qū)λ姓埱罂稍L問

  • 只是DBMS對檢索出的數(shù)據(jù)(而不是指出表中活動數(shù)據(jù))進行復(fù)制,使數(shù)據(jù)在游標打開和訪問期間不變化

在 MySQL 中,游標只能用于存儲過程和函數(shù)。

在 MySQL 中,存儲過程或函數(shù)中的查詢有時會返回多條記錄,而使用簡單的 SELECT 語句,沒有辦法得到第一行、下一行或前十行的數(shù)據(jù),這時可以使用游標來逐條讀取查詢結(jié)果集中的記錄。游標在部分資料中也被稱為光標。

關(guān)系數(shù)據(jù)庫管理系統(tǒng)實質(zhì)是面向集合的,在 MySQL 中并沒有一種描述表中單一記錄的表達形式,除非使用 WHERE 子句來限制只有一條記錄被選中。所以有時我們必須借助于游標來進行單條記錄的數(shù)據(jù)處理。

1. 聲明游標

MySQL 中使用 DECLARE 關(guān)鍵字來聲明游標,并定義相應(yīng)的 SELECT 語句,根據(jù)需要添加 WHERE 和其它子句。其語法的基本形式如下:

DECLARE cursor_name CURSOR FOR select_statement;

其中,cursor_name 表示游標的名稱;select_statement 表示 SELECT 語句,可以返回一行或多行數(shù)據(jù)。

例 1

下面聲明一個名為 nameCursor 的游標,代碼如下:

mysql> DELIMITER //
mysql> CREATE PROCEDURE processnames()
    -> BEGIN
    -> DECLARE nameCursor CURSOR
    -> FOR
    -> SELECT name FROM tb_student;
    -> END//
Query OK, 0 rows affected (0.07 sec)

以上語句定義了 nameCursor 游標,游標只局限于存儲過程中,存儲過程處理完成后,游標就消失了。

2. 打開游標

聲明游標之后,要想從游標中提取數(shù)據(jù),必須首先打開游標。在 MySQL 中,打開游標通過 OPEN 關(guān)鍵字來實現(xiàn),其語法格式如下:

OPEN cursor_name;

其中,cursor_name 表示所要打開游標的名稱。需要注意的是,打開一個游標時,游標并不指向第一條記錄,而是指向第一條記錄的前邊。

在程序中,一個游標可以打開多次。用戶打開游標后,其他用戶或程序可能正在更新數(shù)據(jù)表,所以有時會導(dǎo)致用戶每次打開游標后,顯示的結(jié)果都不同。

3. 使用游標

游標順利打開后,可以使用 FETCH...INTO 語句來讀取數(shù)據(jù),其語法形式如下:

FETCH cursor_name INTO var_name [,var_name]...

上述語句中,將游標 cursor_name 中 SELECT 語句的執(zhí)行結(jié)果保存到變量參數(shù) var_name 中。變量參數(shù) var_name 必須在游標使用之前定義。使用游標類似高級語言中的數(shù)組遍歷,當?shù)谝淮问褂糜螛藭r,此時游標指向結(jié)果集的第一條記錄。

MySQL 的游標是只讀的,也就是說,你只能順序地從開始往后讀取結(jié)果集,不能從后往前,也不能直接跳到中間的記錄。

4. 關(guān)閉游標

游標使用完畢后,要及時關(guān)閉,在 MySQL 中,使用 CLOSE 關(guān)鍵字關(guān)閉游標,其語法格式如下:

CLOSE cursor_name;

CLOSE 釋放游標使用的所有內(nèi)部內(nèi)存和資源,因此每個游標不再需要時都應(yīng)該關(guān)閉。

在一個游標關(guān)閉后,如果沒有重新打開,則不能使用它。但是,使用聲明過的游標不需要再次聲明,用 OPEN 語句打開它就可以了。

如果你不明確關(guān)閉游標,MySQL 將會在到達 END 語句時自動關(guān)閉它。游標關(guān)閉之后,不能使用 FETCH 來使用該游標。

以上就是關(guān)于“mysql函數(shù)中可不可以用游標”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI