Maison  >  Article  >  base de données  >  Qu’est-ce qu’un curseur dans MySQL ? Comment utiliser les curseurs ?

Qu’est-ce qu’un curseur dans MySQL ? Comment utiliser les curseurs ?

青灯夜游
青灯夜游avant
2021-09-08 19:13:133276parcourir

Qu'est-ce qu'un curseur ? Comment utiliser les curseurs ? L'article suivant vous amènera à comprendre les curseurs dans MySQL et à présenter les étapes d'utilisation des curseurs. J'espère qu'il vous sera utile !

Qu’est-ce qu’un curseur dans MySQL ? Comment utiliser les curseurs ?

Pour comprendre ce qu'est un curseur, vous devez d'abord comprendre la procédure stockée. Une procédure stockée est une instruction SQL qui a été compilée à l'avance et stockée dans la base de données, et vous pouvez également utiliser <. code>IFInstructions, définition de variables, boucles, etc. Par exemple, l'instruction suivante est utilisée pour créer une procédure stockée. [Recommandations associées : mysql video tutorielIF语句、设置变量、循环等,比如下面语句用于创建一个存储过程。【相关推荐: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, &#39;张三&#39;, 500);
insert into cursor_table values(2, &#39;李四&#39;, 200);
insert into cursor_table values(3, &#39;王五&#39;, 100);
insert into cursor_table values(4, &#39;老六&#39;, 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]

rrreee

Stockage des appels processus.

rrreee
Les procédures stockées peuvent réduire la transmission entre la base de données et le serveur d'applications et sont utiles pour améliorer l'efficacité du traitement de la base de données. Le curseur (Curseur) est également appelé curseur à certains endroits. Il peut parcourir l'ensemble de résultats lors du stockage. procédure. , mais actuellement, MySQL nous permet uniquement d'obtenir chaque ligne du jeu de résultats du début à la fin de l'instruction SELECT. Nous ne pouvons pas non plus obtenir la première ligne de la dernière ligne. sauter directement à la ligne spécifiée dans le jeu de résultats.

Il y a plusieurs étapes pour utiliser un curseur.

1. Définition du curseurrrreee2. Ouvrez le curseur

rrreee🎜3 Obtenez les données dans le curseur🎜rrreee🎜4. Fermez le curseur🎜rrreee🎜5. heading-1" >Exemple🎜Créez une table🎜rrreee🎜Maintenant, nous utilisons le curseur pour parcourir la table curseur_table et stocker les noms des personnes de plus de 30 ans dans curseur_table_user🎜rrreeerrreee🎜Il y a une ligne très importante dans ce programme, DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true , ce qui signifie que si le curseur ou l'instruction SELECT n'a pas de données, définissez la valeur du done variable à true pour quitter la boucle. 🎜🎜Ce qui suit consiste à parcourir séquentiellement WHILE. 🎜🎜🎜Adresse originale : https://juejin.cn/post/7003237966952792077🎜🎜🎜Pour plus de connaissances sur la programmation, veuillez visiter : 🎜Vidéo de programmation🎜 ! ! 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer