MySQL 存储过程的 - delete 不执行事件
因为需要做性能测试, 需要准备一些初始数据, 打算用存储过程来实现. 于是写了一个 MySQL 的存储过程进行数据灌入, 里面的逻辑比较简单, 现清理数据, 然后开始灌入数据的循环.
经过简化后的存储过程:delimiter $$
drop procedureifexists good_generate;
CREATE DEFINER=`root`@`localhost`PROCEDURE`good_generate`(IN num INT)
BEGIN
DECLARE idintDEFAULT(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);
setid=id+1;
ENDWHILE;
END$$
调用存储过程:
-- 停掉事务
set autocommit = 0;
-- 调用存储过程
call good_generate(10);
-- 重启事务setautocommit=1;
SELECT*fromtb_goodswhereid>149187842867961;
运行效果:
-- 停掉事务setautocommit=0
>OK
> 时间: 0.003s
-- 调用存储过程call good_generate(10)
>OK
> 时间: 0.011s
-- 重启事务setautocommit=1
>OK
> 时间: 0.538sSELECT*fromtb_goodswhereid>149187842867961
>OK
> 时间: 0.004s
查询结果:
image.PNG
可见数据并没有删除.
把 insert 相关语句删除掉的单独执行清理的存储过程, 经过试验可以正常删除数据, 这说明既有 insert 又有 delete 时有问题, delete 不能执行.
如果把 delete 后的 where 条件删除掉, 发现也可以正确执行, 但我的情况是不能删除已有的数据, 只能删除通过存储过程添加的数据.
来源: http://www.jianshu.com/p/7fa437de47df