利用MYSQL存储过程批量造数据
作为一名测试工程师,造这种存量数据,一般都是压测的时候需要一些存量数据。我平时用Jmeter比较多,比较少用到MYSQL的存储过程,最近浏览博客,看到有人用这个方式造数据,就趁机体验了一把。
一般的压测存量数据都是通过如下几种方式:
- 通过接口造存量数据
- 通过JMETER MySQL脚本发起批量数据
- 通过MySQL 存储过程造存量数据。
优点 VS 缺点
模式 | 优点 | 缺点 |
---|---|---|
1. 通过接口造存量数据 | 数据比较接近真实场景 | 流程比较长,耗时比较久 |
2. 通过JMETER MySQL脚本发起批量数据 | 脚本配置简单,上手容易 | 数据假,跟实际发生的数据出入比较大 |
3. 通过MySQL 存储过程造存量数据。 | 批量生成数据的耗时短 | 需要准备存储过程脚本,调试、有一定的门槛 |
这段创建函数的,我没有用到,做个笔记后续用到的时候可以用一下。
创建函数
CREATE FUNCTION `rand_string`(n INT) RETURNS varchar(255) CHARSET latin1
BEGIN
DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
DECLARE return_str varchar(255) DEFAULT '' ;
DECLARE i INT DEFAULT 0;
WHILE i < n DO
SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*62 ),1));
SET i = i +1;
END WHILE;
RETURN return_str;
END
创建存储过程以及调用存储过程
DELIMITER $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
DROP PROCEDURE test_pp $$ #不知道为何,只要用IF EXISTS很容易报错,所以此处干脆不用。
CREATE PROCEDURE test_pp(IN n INTEGER)
BEGIN
DECLARE i INT DEFAULT 1;# can not be 0
WHILE i<n DOINSERT INTO risk_controller_record(`app_id`, `controll_key``) VALUES (CONCAT("TEST",i), CONCAT("controll_key_test",i));SET i=i+1;
END WHILE ;
END $$
DELIMITER ;;CALL test_pp(100);在定义过程时,使用 DELIMITER $$ 命令将语句的结束符号从分号 ; 临时改为两个$$,使得过程体中使用的分号被直接传递到服务器,而不会被客户端(如mysql)解释。
一些常用的MySQL函数需要知道
http://www.runoob.com/mysql/mysql-functions.html
MySQL函数 | 说明 |
---|---|
CONCAT(s1,s2…sn) | 字符串 s1,s2 等多个字符串合并为一个字符串合并多个字符串 |
TRIM(s) | 去掉字符串 s 开始和结尾处的空格 |
UPPER(s) | 将字符串转换为大写 |
ABS(x) | 返回 x 的绝对值 |
FLOOR(x) | 返回小于或等于 x 的最大整数 |
CEILING(x) | 返回大于或等于 x 的最小整数 |
GREATEST(expr1, expr2, expr3, …) | 返回列表中的最大值 |
LEAST(expr1, expr2, expr3, …) | 返回列表中的最小值 |
RAND() | 返回 0 到 1 的随机数 |
ROUND(x) | 返回离 x 最近的整数 |
TRUNCATE(x,y) | 返回数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入) |
ADDDATE(d,n) | 计算起始日期 d 加上 n 天的日期 |
ADDTIME(t,n) | 时间 t 加上 n 秒的时间 |
CURRENT_DATE() | 返回当前日期 |
CURDATE() | 返回当前日期 |
CURRENT_TIMESTAMP() | 返回当前日期和时间 |
DAY(d) | 返回日期值 d 的日期部分 |
DAYNAME(d) | 返回日期 d 是星期几,如 Monday,Tuesday |
LOCALTIME() | 返回当前日期和时间 |
LOCALTIMESTAMP() | 返回当前日期和时间 |
利用MYSQL存储过程批量造数据相关推荐
- mysql测试数据100w_利用MySQL存储过程批量插入100W条测试数据
这里将告诉您利用MySQL存储过程批量插入100W条测试数据,具体完成步骤:DROP PROCEDURE IF EXISTS insert_batch; CREATE PROCEDURE insert ...
- mysql 存储过程 批量导入数据_sql 利用存储过程批量导入数据
什么是 存储过程(stored procedure)是一组为了完成特定功能的sql语句集,是利用sql server所提供的transact-sql语言所编写的程序.经编译后存储在中.存储过程是数据库 ...
- MySQL存储过程批量插入数据
文章目录 1. 怎么写出来的?踩了哪些坑 1.1 新建存储过程的语法 1.2 声明变量 1.3 存储过程参数 1.4 WHILE循环 1.5 写存储过程 1. 怎么写出来的?踩了哪些坑 因为阿里Jav ...
- MySQL存储过程 — 解析 XML 数据并实现插入操作
MySQL存储过程 - 解析 XML 数据并实现插入操作 一.概述: 最近在做项目的过程中,需要利用MySQL存储过程 解析 XML数据并进行插入操作,因此就学习了下.MySQL 解析 XML 的思路 ...
- 软件测试如何批量造数据
测试过程中,经常用到批量造数据的场景:准备大量测试数据.执行压测等等. 比如说,你要模拟1000个用户同时发短信,那么你需要先创建1000个不同手机号的用户,直接在页面上造数据显然是不太现实的. 如果 ...
- mysql同步binlog_利用MySQL的Binlog实现数据同步与订阅(下)
利用MySQL的Binlog实现数据同步与订阅(下)blog.yuanpei.me 终于到这个系列的最后一篇,在前两篇博客中,我们分别了介绍了Binlog的概念和事件总线(EventBus)的实现, ...
- 利用MySQL存储过程分割字符串
2019独角兽企业重金招聘Python工程师标准>>> MySQL存储过程可以用于分割字符串,下面就为您详细介绍这种MySQL存储过程的用法,供您参考学习之用. 现有一段字符串,如a ...
- mysql存储过程批量建表
asif mysql存储过程批量建表 用MySql的存储过程建立100张表 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ...
- mysql数据库大量造数据
1.准备一条插入sql: INSERT INTO `t_game_record`(`id`, `game_id`, `viewer_id`, `guess_price`, `status`, `cre ...
最新文章
- Python3创建目录文件夹
- 通过仿真和综合认识T触发器(Verilog HDL语言描述T触发器)
- Python使用xlrd和xlwt读取和写入excel详细教程
- [UE4]C++实现动态加载的问题
- python找工作难吗-为什么我不建议你通过 Python 去找工作?
- 建造者模式(Builder Pattern)(转自TerryLee)
- 51nod 1022 石子合并v2
- [pytorch、学习] - 4.4 自定义层
- IPHONE 开发 7 -- Object C 02 字符串NSString 与 char* ,字符串的遍历,字符串的比较,截取与大小写改变,搜索字符串与替换字符串...
- android 环形时间显示_使用Arduino构建OLED显示屏与Android手机接口的智能手表
- JS 获取浏览器窗口大小
- 抓取Crash不让崩溃
- 数据科学(data science)概览
- python-3高级特征
- Eclipse中如何让Java类与Servlet产生关联【实现处理请求内容】
- RFC 6528 翻译
- 【源码好又多】开源在线教育系统
- loading图片实现等待的动画
- COPC酞菁钴,cAS号:3317-67-7磺化酞菁钴 催化剂 深蓝色粉末 磺化酞菁钴
- 什么是uni-app