MySQL中什麼是遊標?如何使用遊標?

青灯夜游
發布: 2021-09-08 19:13:13
轉載
3265 人瀏覽過

什麼是遊標?如何使用遊標?以下這篇文章就來帶大家了解MySQL中的遊標,介紹一下使用遊標的步驟,希望對大家有幫助!

MySQL中什麼是遊標?如何使用遊標?

要明白什麼是遊標,首先要了解預存程序,預存程序是事先經過編譯並且儲存在資料庫中的一段SQL語句,他可以接受參數,也可以在其中使用IF語句、設定變數、循環等,例如下面語句用於建立一個預存程序。 【相關推薦:mysql影片教學

delimiter $$
create procedure select_all() begin select * from user; end;$$
登入後複製

呼叫預存程序。

mysql>  call select_all;$$
登入後複製

預存程序可以減少資料庫和應用程式伺服器之間的傳輸,對提供資料庫處理效率還是有好處的,而遊標(Cursor)有的地方又叫遊標,可以在儲存過程中,對結果集進行循環處理,但目前,MySQL只允許我們從SELECT語句從頭到尾取得結果集中的每一行,無法從最後一行取得到第一行,也無法直接跳到結果集中的指定行。

使用遊標有以下步驟

1、遊標定義

DECLARE cursor_name CURSOR FOR select_statement
登入後複製

2、開啟遊標

OPEN cursor_name;
登入後複製

3、取得遊標中的資料

FETCH cursor_name INTO var_name [, var_name]...
登入後複製

4、關閉遊標

CLOSE cursor_name;
登入後複製

5、釋放遊標

DEALLOCATE cursor_name;
登入後複製

實例

建立表格

CREATE TABLE cursor_table
(id INT ,name VARCHAR(10),age INT
)ENGINE=innoDB DEFAULT CHARSET=utf8;
insert into cursor_table values(1, '张三', 500);
insert into cursor_table values(2, '李四', 200);
insert into cursor_table values(3, '王五', 100);
insert into cursor_table values(4, '老六', 20);


create table cursor_table_user(name varchar(10));
登入後複製

下面我們透過遊標,遍歷cursor_table表,把年齡大於30的人名存放到cursor_table_user

drop procedure getTotal;
delete from cursor_table_user ;

CREATE  PROCEDURE getTotal()
BEGIN  
   DECLARE total INT; 
   DECLARE sid INT;  
   DECLARE sname VARCHAR(10);  
   DECLARE sage INT;  
   DECLARE done INT DEFAULT false;  
   DECLARE cur CURSOR FOR SELECT id,name,age from cursor_table where age>30;  
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;   
   SET total = 0;  
   OPEN cur;  
   FETCH cur INTO sid, sname, sage;  
   WHILE(NOT done) 
   DO  
       insert cursor_table_user values(sname);
       SET total = total + 1;  
       FETCH cur INTO sid, sname, sage;  
       
   END WHILE;  
   CLOSE cur;  
   SELECT total;  
END
登入後複製
call getTotal();

mysql> select * from cursor_table_user;
+--------+
| name   |
+--------+
| 张三   |
| 李四   |
| 王五   |
+--------+
3 rows in set (0.00 sec)
登入後複製

這段程式有一行非常重要,DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;  ,他表示如果遊標或SELECT語句沒有資料的時候,就會將done變數的值設定  為true,用來退出循環。

下面就是透過WHILE來依序遍歷。

原文網址:https://juejin.cn/post/7003237966952792077

更多程式相關知識,請造訪:程式設計影片! !

以上是MySQL中什麼是遊標?如何使用遊標?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:juejin.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!