共計 1916 個字符,預計需要花費 5 分鐘才能閱讀完成。
這篇文章主要介紹了 MySQL 中怎么使用游標,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
要明白什么是游標,首先要了解存儲過程,存儲過程是事先經過編譯并且存儲在數據庫中的一段 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
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,用來退出循環。
感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“MySQL 中怎么使用游標”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!