前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何用Mysql的储存过程,新增100W条数据

如何用Mysql的储存过程,新增100W条数据

作者头像
陈大剩博客
发布2023-03-06 09:03:10
1.5K0
发布2023-03-06 09:03:10
举报
文章被收录于专栏:陈大剩博客专栏

什么是存储过程,如何创建一个存储过程

存储过程的英文是 Stored Procedure,它的思想很简单,就是 SQL 语句的封装; 一旦存储过程被创建出来,使用它就像使用函数一样简单; 我们直接通过调用存储过程名即可,存储过程实际上由 SQL 语句和流控制语句共同组成。

代码语言:javascript
复制
CREATE PROCEDURE 存储过程名称 ([参数列表])
BEGIN
    需要执行的语句
END    

 ---使用储存过程
CALL 存储过程名称 ([参数列表]);

使用Mysql的储存过程,新增100W条数据

代码语言:javascript
复制
--创建表
CREATE TABLE `user`(`user_id` INT UNSIGNED AUTO_INCREMENT,`user_name` VARCHAR(40) NOT NULL,`create_time` DATETIME, PRIMARY KEY ( `user_id` ))ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 创建存储过程+事务
CREATE PROCEDURE  `insert_user` (IN START INT(10), IN max_num INT(10))
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE date_start DATETIME DEFAULT ('2021-01-16 00:00:00');
DECLARE date_temp DATETIME;
SET date_temp = date_start;
--关闭自动提交
SET autocommit=0;
REPEAT
SET i=i+1;
SET date_temp = date_add(date_temp, interval RAND()*60 second);
INSERT INTO user(user_id, user_name, create_time) VALUES((start+i), CONCAT('user_',i), date_temp);
UNTIL i = max_num
END REPEAT;
COMMIT;
END
--插入数据
CALL insert_user(10000,1000000);

用 date_start 变量来定义初始的注册时间,时间为 2021 年 1 月 16 日 0 点 0 分 0 秒,然后用 date_temp 变量计算每个用户的注册时间,新的注册用户与上一个用户注册的时间间隔为 60 秒内的随机值。然后使用 REPEAT … UNTIL … END REPEAT 循环,对 max_num 个用户的数据进行计算; 在循环前,将 autocommit 设置为 0,这样等计算完成再统一插入,执行效率更高。

注意:

如果你使用 Navicat 这个工具来管理 MySQL 执行存储过程,那么直接执行上面这段代码就可以了; 如果用的是 MySQL,你还需要用 DELIMITER 来临时定义新的结束符; 因为默认情况下 SQL 采用(;)作为结束符,这样当存储过程中的每一句 SQL 结束之后,采用(;)作为结束符,就相当于告诉 SQL 可以执行这一句了; 但是存储过程是一个整体,我们不希望 SQL 逐条执行,而是采用存储过程整段执行的方式,因此我们就需要临时定义新的 DELIMITER,新的结束符可以用(//)或者($$); 如果你用的是 MySQL(指的客户端),那么上面这段代码,应该写成下面这样

代码语言:javascript
复制
--创建表
CREATE TABLE `user`(`user_id` INT UNSIGNED AUTO_INCREMENT,`user_name` VARCHAR(40) NOT NULL,`create_time` DATETIME, PRIMARY KEY ( `user_id` ))ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 创建存储过程+事务
DELIMITER $$
CREATE PROCEDURE  `insert_user` (IN START INT(10), IN max_num INT(10))
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE date_start DATETIME DEFAULT ('2021-01-16 00:00:00');
DECLARE date_temp DATETIME;
SET date_temp = date_start;
--关闭自动提交
SET autocommit=0;
REPEAT
SET i=i+1;
SET date_temp = date_add(date_temp, interval RAND()*60 second);
INSERT INTO user(user_id, user_name, create_time) VALUES((start+i), CONCAT('user_',i), date_temp);
UNTIL i = max_num
END REPEAT;
COMMIT;
END $$
DELIMITER ;
--插入数据
CALL insert_user(10000,1000000);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-01-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是存储过程,如何创建一个存储过程
  • 使用Mysql的储存过程,新增100W条数据
    • 注意:
    相关产品与服务
    对象存储
    对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档