因为需要做性能测试, 需要准备一些初始数据, 打算用存储过程来实现. 于是写了一个 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 条件删除掉, 发现也可以正确执行, 但我的情况是不能删除已有的数据, 只能删除通过存储过程添加的数据.
来源: http://www.jianshu.com/p/7fa437de47df