0
点赞
收藏
分享

微信扫一扫

编写存储过程批量造数据

天使魔鬼 2022-08-04 阅读 94


介绍

在实际工作中没有测试性能,我们经常需要改造大批量的数据,手动插入是不太可能的,这时候就得用到存储过程了

CREATE TABLE `kf_user_info` (
`id` int(11) NOT NULL COMMENT '用户id',
`gid` int(11) NOT NULL COMMENT '客服组id',
`name` varchar(25) NOT NULL COMMENT '客服名字',
`nickName` varchar(64) NOT NULL COMMENT '客服昵称',
`mobile` varchar(12) NOT NULL COMMENT '手机号',
`maxChannel` int(11) NOT NULL COMMENT '最大接入数',
`createTime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updateTime` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `mobile` (`mobile`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='客户信息表';

如何定义一个存储过程呢?

CREATE PROCEDURE 存储过程名称 ([参数列表])
BEGIN
需要执行的语句
END

举个例子,插入id为100-999的1000条数据
用Navicat执行

-- 删除之前定义的
DROP PROCEDURE IF EXISTS create_kf;

-- 开始定义
CREATE PROCEDURE create_kf(IN loop_times INT)
BEGIN
DECLARE var INT;
SET var = 100;
WHILE var < loop_times DO
INSERT INTO kf_user_info (`id`,`gid`,`name`,`nickName`,`mobile`,`maxChannel`)
VALUES (var, 1000, var, var, var, var);
SET var = var + 1;
END WHILE;
END;

-- 调用
call create_kf(1000);

存储过程的三种参数类型

参数类型

是否返回

作用

IN


向存储过程传入参数,存储过程中修改该参数的值,不能被返回

OUT


把存储过程计算的结果放到该参数中,调用者可以得到返回值

INOUT


IN和OUT的结合,即用于存储过程的传入参数,同时又可以把计算结构放到参数中,调用者可以得到返回值

用MySQL执行

得用DELIMITER 定义新的结束符,因为默认情况下SQL采用(;)作为结束符,这样当存储过程中的每一句SQL结束之后,采用(;)作为结束符,就相当于告诉MySQL可以执行这一句了。但是存储过程是一个整体,我们不希望SQL逐条执行,而是采用存储过程整段执行的方式,因此我们就需要定义新的DELIMITER ,新的结束符可以用(//)或者($$)

因为上面的代码应该就改为如下这种方式

DELIMITER //
CREATE PROCEDURE create_kf_kfGroup(IN loop_times INT)
BEGIN
DECLARE var INT;
SET var = 100;
WHILE var <= loop_times DO
INSERT INTO kf_user_info (`id`,`gid`,`name`,`nickName`,`mobile`,`maxChannel`)
VALUES (var, 1000, var, var, var, var);
SET var = var + 1;
END WHILE;
END //
DELIMITER ;

查询已经定义的存储过程

show procedure status;

参考博客


举报

相关推荐

0 条评论