什麼是遊標?如何使用遊標?以下這篇文章就來帶大家了解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中文網其他相關文章!