您好,登錄后才能下訂單哦!
這篇文章主要介紹了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,用來退出循環。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“MySQL中怎么使用游標”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。