這篇文章主要介紹了MySQL中怎么使用游標(biāo),具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
站在用戶的角度思考問題,與客戶深入溝通,找到寶豐網(wǎng)站設(shè)計(jì)與寶豐網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站建設(shè)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋寶豐地區(qū)。
要明白什么是游標(biāo),首先要了解存儲(chǔ)過程,存儲(chǔ)過程是事先經(jīng)過編譯并且存儲(chǔ)在數(shù)據(jù)庫中的一段SQL語句,他可以接受參數(shù),也可以在其中使用IF
語句、設(shè)置變量、循環(huán)等,比如下面語句用于創(chuàng)建一個(gè)存儲(chǔ)過程?!鞠嚓P(guān)推薦:mysql視頻教程】
delimiter $$ create procedure select_all() begin select * from user; end;$$
調(diào)用存儲(chǔ)過程。
mysql> call select_all;$$
存儲(chǔ)過程可以減少數(shù)據(jù)庫和應(yīng)用服務(wù)器之間的傳輸,對(duì)提供數(shù)據(jù)庫處理效率還是有好處的,而游標(biāo)(Cursor)有的地方又叫光標(biāo),可以在存儲(chǔ)過程中,對(duì)結(jié)果集進(jìn)行循環(huán)處理,但是目前,MySQL只允許我們從SELECT
語句從頭到尾獲取結(jié)果集中的每一行,無法從最后一行獲取到第一行,也無法直接跳轉(zhuǎn)到結(jié)果集中的指定行。
使用游標(biāo)有以下幾個(gè)步驟。
1、游標(biāo)定義
DECLARE cursor_name CURSOR FOR select_statement
2、打開游標(biāo)
OPEN cursor_name;
3、獲取游標(biāo)中的數(shù)據(jù)
FETCH cursor_name INTO var_name [, var_name]...
4、關(guān)閉光標(biāo)
CLOSE cursor_name;
5、釋放光標(biāo)
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));
下面我們通過游標(biāo),遍歷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;
,他表示如果游標(biāo)或SELECT語句沒有數(shù)據(jù)的時(shí)候,將done
變量的值設(shè)置 為 true,用來退出循環(huán)。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“MySQL中怎么使用游標(biāo)”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!