MySQL 存储过程(游标)

在存储过程中使用MySQL的游标,对数据库所有的表添加索引。

CREATE DEFINER=`root`@`localhost` PROCEDURE `add_index`()
BEGIN 
        DECLARE strClear VARCHAR(500);
        DECLARE done INT DEFAULT 0;
    #定义游标
    DECLARE curOne CURSOR FOR 
    SELECT CONCAT(" ALTER TABLE ",table_name," ADD INDEX time_idx (`create_time`); ") FROM information_schema.TABLES WHERE TABLE_SCHEMA = '数据库名称';    
    #绑定控制变量到游标,游标循环结束自动转为True
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    #打开游标
    OPEN curOne;

    #FETCH curOne INTO strClear;
    REPEAT
        FETCH curOne INTO strClear;
                
            IF !done THEN
                
                    SELECT strClear;

                    #动态执行SQL语句
                    SET @mysql = strClear;
                    PREPARE stmt FROM @mysql;
                    EXECUTE stmt;
                    DEALLOCATE PREPARE stmt;
                    
            END IF;

    UNTIL done = 1 END REPEAT;

    #关闭游标
    CLOSE curOne;
END

最后一条记录重复操作的原因:

最后一次通过循环遍历的时候,“fetch”是失败的,如果这个时候继续处理,会重复前一次的操作。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值