开发经验随笔码农的世界程序员

MySQL存储过程的-delete不执行事件

2019-08-10  本文已影响14人  山东大葱哥

因为需要做性能测试,需要准备一些初始数据,打算用存储过程来实现。于是写了一个MySQL的存储过程进行数据灌入,里面的逻辑比较简单,现清理数据,然后开始灌入数据的循环。
经过简化后的存储过程:

delimiter $$
drop procedure if exists good_generate;
CREATE DEFINER=`root`@`localhost` PROCEDURE `good_generate`(IN num INT)
BEGIN   
    DECLARE id int DEFAULT(1);
    DELETE from `tb_goods` where `id` > 149187842867961; -- 删除新增的数据     
    WHILE id <= num DO      
        INSERT INTO `tb_goods`(`seller_id`, `goods_name`,  `audit_status`, `caption`, `price`) VALUES ('baidu', 'name', '1','副标题打折促销中',   100.11);
        set id=id+1;
    END WHILE;
    
END $$

调用存储过程:

-- 停掉事务
set autocommit = 0;  
-- 调用存储过程
call good_generate(10);
-- 重启事务
set autocommit = 1;  
SELECT *  from tb_goods where id > 149187842867961;

运行效果:

-- 停掉事务
set autocommit = 0
> OK
> 时间: 0.003s


-- 调用存储过程
call good_generate(10)
> OK
> 时间: 0.011s


-- 重启事务
set autocommit = 1
> OK
> 时间: 0.538s


SELECT *  from tb_goods where id > 149187842867961
> OK
> 时间: 0.004s

查询结果:


image.png

可见数据并没有删除。

把insert相关语句删除掉的单独执行清理的存储过程,经过试验可以正常删除数据,这说明既有insert又有delete时有问题,delete不能执行。

如果把delete后的where条件删除掉,发现也可以正确执行,但我的情况是不能删除已有的数据,只能删除通过存储过程添加的数据。

上一篇 下一篇

猜你喜欢

热点阅读