mysql,for循环执行sql

文章讲述了如何使用MySQL的存储过程实现模拟大量数据进行SQL优化,但强调了这种方法在开启binlog后可能导致磁盘占用过大,仅适用于单机开发服务器,不适用于线上环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遇到一个问题,我需要模拟上百万数据来优化sql,线上数据down不下来,测试库又没有,写代码执行要么慢要么就是sql语句太长。

于是,直接用mysql自带的功能去实现!

简单而简单

mysql可以for循环?没错!!可以的

在 MySQL 中,通常使用存储过程(Stored Procedure)来实现类似于 for 循环的功能。存储过程允许你在数据库中定义一组 SQL 语句,并可以通过调用存储过程来执行这些语句。

话不多说,开整!!!!

DELIMITER $$

CREATE PROCEDURE simple_loop()
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE max_count INT DEFAULT 10;
    
    WHILE i <= max_count DO
        -- 在这里放置你想要循环执行的 SQL 语句
        INSERT INTO your_table (column1, column2) VALUES (i, 'some value');
        
        SET i = i + 1;
    END WHILE;
END$$

DELIMITER ;

simple_loop : 存储过程名称,可以自定义,记下来!!

DECLARE max_count INT DEFAULT 10;  就是循环的次数  

i 和 max_count : 自定义,就是for循环

好了,定义好了,为啥我执行没反应呢?

莫慌,当前只是定义,我们需要调用,没错就是存储过程就是个method (函数)!

开始调用

CALL simple_loop();

没错,就是CALL 就行!!!

------  end

20240304 补充

以上方法只能讲慎用,单机服务器,仅仅用测试数据或者大量插入数据进行sql测试、优化等等都问题不大,但是如果开启了binlog,那就有问题了。

两个问题:

1.啥是binlog? 记录数据库增删改,不记录查询的二进制日志.
2.作用:用于数据恢复.

binlog:主要作用是用于数据库的主从复制及数据的增量恢复。

先不管第二个问题,先来看第一个

记录数据库增删改,不记录查询的二进制日志

懂了吧,每次增加或者修改都会入binlog,所以执行上万次甚至百万次,binlog有多大不用多说了吧。当然删除没问题

所以,以上方法,建议只在单机且开发服务器上使用。

测试环境其实也没问题,就是可能很占磁盘

线上环境一定不允许

 end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值