因为需要做性能测试,需要准备一些初始数据,打算用存储过程来实现。于是写了一个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
查询结果:

可见数据并没有删除。
把insert相关语句删除掉的单独执行清理的存储过程,经过试验可以正常删除数据,这说明既有insert又有delete时有问题,delete不能执行。
如果把delete后的where条件删除掉,发现也可以正确执行,但我的情况是不能删除已有的数据,只能删除通过存储过程添加的数据。
网友评论