文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL 游标

2024-04-02 19:55

关注

光标声明

声明光标
DECLARE cursor_name CURSOR FOR select_statement

这个语句声明一个光标。也可以在子程序中定义多个光标,但是一个块中的每一个光标必须有唯一的名字。

注意:SELECT语句不能有INTO子句。

打开光标
OPEN cursor_name

这个语句打开先前声明的光标。

前进光标
FETCH cursor_name INTO var_name [, var_name] ...

这个语句用指定的打开光标读取下一行(如果有下一行的话),并且前进光标指针。

关闭光标
CLOSE cursor_name

这个语句关闭先前打开的光标。 

 

批量添加索引

共享一个批量添加索引的游标,当一个库中有上百张表结构一样但是名称不一样的表,这个时候批量操作就变得简单了。

MySQL 游标

#删除创建存储过程
DROP PROCEDURE IF EXISTS FountTable;
DELIMITER $$CREATE PROCEDURE FountTable()BEGIN
    DECLARE TableName varchar(64); 
    #声明游标    DECLARE cur_FountTable CURSOR FOR SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA='front' AND TABLE_NAME LIKE 'student%';    DECLARE EXIT HANDLER FOR not found CLOSE cur_FountTable;
    #打开游标    OPEN cur_FountTable;
    REPEAT         FETCH cur_FountTable INTO TableName;
         #定义预处理         SET @SQLSTR1 = CONCAT('create index Flag on ','`',TableName,'`',' (Flag); '); 
         SET @SQLSTR2 = CONCAT('create index State on ','`',TableName,'`',' (State); '); 
         SET @SQLSTR3 = CONCAT('create index upload on ','`',TableName,'`',' (upload); '); 
         SET @SQLSTR4 = CONCAT('create index ccFlag on ','`',TableName,'`',' (lockFlag); '); 
         SET @SQLSTR5 = CONCAT('create index comes on ','`',TableName,'`',' (comes); '); 
         ###SET @SQLSTR=CONCAT(@SQLSTR1,@SQLSTR2,@SQLSTR3,@SQLSTR4,@SQLSTR5 );         PREPARE STMT1 FROM @SQLSTR1; 
         PREPARE STMT2 FROM @SQLSTR2;  
         PREPARE STMT3 FROM @SQLSTR3; 
         PREPARE STMT4 FROM @SQLSTR4;  
         PREPARE STMT5 FROM @SQLSTR5;  
         EXECUTE STMT1; 
         EXECUTE STMT2; 
         EXECUTE STMT3; 
         EXECUTE STMT4; 
         EXECUTE STMT5; 
         DEALLOCATE PREPARE STMT1;         DEALLOCATE PREPARE STMT2;         DEALLOCATE PREPARE STMT3;         DEALLOCATE PREPARE STMT4;         DEALLOCATE PREPARE STMT5;
        # SELECT @SQLSTR;
         
    UNTIL 0 END REPEAT;
    #关闭游标    CLOSE cur_FountTable;END $$
DELIMITER ;


CALL FountTable();

MySQL 游标

这里有几个细节:

 

注意:由于mysql在存储过程当中无法将查询出来的变量名直接作为表名来用,所以这里要用到动态拼接SQL的方法,但是通常的SET CONCAT的方法并不管用,所以这里就使用了PREPARE来进行预编译。

 在定义游标之前所以的定义都只能通过decalre定义,不能使用SET定义!!!!!!


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯