MySQL中什么是游標?如何使用游標?

什么是游標?如何使用游標?下面本篇文章就來帶大家了解一下mysql中的游標,介紹一下使用游標的步驟,希望對大家有所幫助!

MySQL中什么是游標?如何使用游標?

要明白什么是游標,首先要了解存儲過程,存儲過程是事先經(jīng)過編譯并且存儲在數(shù)據(jù)庫中的一段sql語句,他可以接受參數(shù),也可以在其中使用if語句、設置變量、循環(huán)等,比如下面語句用于創(chuàng)建一個存儲過程。【相關推薦:mysql視頻教程

delimiter?$$ create?procedure?select_all()?begin?select?*?from?user;?end;$$

調(diào)用存儲過程。

mysql>??call?select_all;$$

存儲過程可以減少數(shù)據(jù)庫和應用服務器之間的傳輸,對提供數(shù)據(jù)庫處理效率還是有好處的,而游標(Cursor)有的地方又叫光標,可以在存儲過程中,對結果集進行循環(huán)處理,但是目前,MySQL只允許我們從SELECT語句從頭到尾獲取結果集中的每一行,無法從最后一行獲取到第一行,也無法直接跳轉到結果集中的指定行。

使用游標有以下幾個步驟

1、游標定義

DECLARE?cursor_name?CURSOR?for?select_statement

2、打開游標

OPEN?cursor_name;

3、獲取游標中的數(shù)據(jù)

FETCH?cursor_name?INTO?var_name?[,?var_name]...

4、關閉光標

CLOSE?cursor_name;

5、釋放光標

DEALLOCATE?cursor_name;

實例

創(chuàng)建表

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語句沒有數(shù)據(jù)的時候,將done變量的值設置??為 true,用來退出循環(huán)。

下面就是通過WHILE來依次遍歷。

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

更多編程相關知識,請訪問:mysql視頻教程!!

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享