mysql快速插入大量测试数据(包含IDEA对于数据库的一些操作技巧)

1、要往mysql中插入大批量(万条以上)测试数据的方式有很多,而我采用的方法是存储过程。因为它是直接在数据库上操作,避开其它编程语言,这是最快捷的方式,但写存储过程是很麻烦的事情,在我看来它跟汇编语言的相似度有点高,很不想面对。(下面的代码可能写注释的时候中英文没有切换好,使用的时候注意一下)

后面有介绍定义函数生成随机数据,为了避免没有认真看文章导致报错,建议先执行一下以下语句再进行操作

set global log_bin_trust_function_creators=1;

2、直接给代码,大家模仿就行。

--创建存储过程
CREATE  PROCEDURE `add`(IN n int) 
BEGIN
    DECLARE i INT DEFAULT 1;
	WHILE (i <= n ) DO
		INSERT into 表名 () VALUES ();
		set i=i+1;
	END WHILE;
END

-- 调用
CALL add(100) --这是插入100

以上是最基本的插入代码,都是sql语句直接执行即可。但往往我们的项目都很复杂,需要自动生成随机数据,甚至要关联多张表。

3、数据表中一般都是有外键关联(不一定是物理上的外键,逻辑上也是),所以存储过程中需要用多个参数,多次循环。举个例子,学生表生成一个学生,那么选课表可能就需要生成多个与该学生相关的选课纪录。所以需要嵌套循环

CREATE  PROCEDURE `add`(IN n int)
BEGIN
    DECLARE i INT DEFAULT 1;
	DECLARE j INT DEFAULT 1;
	WHILE (i <= n ) DO
		set j = floor(1+rand()*19); --让j等于随机的选课记录数
		insert into...  --先往学生表中插入一条
		WHILE (j > 0) DO
			insert into..  --再往选修表中插入j条
    		set j = j-1;
		END WHILE;
		set i=i+1;
	END WHILE;
END

上面只是个简单的例子,在插入数据时可能还要保证关联字段的一致性,所以还需要定义更多的变量。但掌握了方法,无论多复杂的情况其实还是能够解决的。这边主要说明定义变量和循环,存储过程与函数类似,还有其它的逻辑,大家可以自行去了解。

4、现在介绍一下如何生成一些常用的数据

  • 随机数:
floor(10 + rand() * 10); --low + RAND() * (high − low),比如该例子的范围就是 [10,20)
  • 指定长度的字符串:
    要先构造一个函数,然后调用即可。对新手再次强调,这些都是sql语句,找到能执行sql语句的地方执行就行,不要当成是其他编程语言。
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

--调用
rand_string(10) --长度为10

直接执行可能会报错,先执行

set global log_bin_trust_function_creators=1;
  • 随机长度的字符串:
    要先定义上面的函数
rand_string(floor(10 + rand() * 10));
  • 随机日期:
 date_add('2022-05-01', interval rand() * 31 day); --这是随机生成20225月x日

有日期时间需求都可以深入了解date_add()函数。

  • 手机号码:
concat('1',
   substring(cast(3 + (rand() * 10) % 7 AS char(50)), 1, 1),
   right(left(trim(cast(rand() AS char(50))), 11), 9))

手机号码、邮箱、qq等都是有限制的,大家可以自行去搜,我就先列举这些常用的。

5、IDEA对于mysql的操作。之前写过idea企业版数据库工具的一些基本操作,阅读量还是挺大的,所以再添加一些其他操作 点击查看IDEA企业版的数据库工具使用教程

  • 选中数据表或数据库,右键有个modify… ,这是用来修改表(库)结构的。

在这里插入图片描述

  • 选中数据表右键,如光标显示,有个垃圾桶Truncate… 这是用来清空整张表的,比如表中的数据有问题或者主键的值太大要重新构建,就可以选择清空整张数据表
    在这里插入图片描述
  • 选中数据表右键,如光标,export… 该操作可以将表中数据导出,选择一下路径就可以成功导出,然后再选择一张字段一致的数据表进行导入。使用场景:比如我们在本地写代码连接数据库,我们可以将本地数据表的数据导出再导入到云服务器上(我对云服务器熟悉程度有限,所以就先在本地搞然后再转到服务器上,汗)。
  • 右键后还有个import自然就是导入了,选择文件即可。
    在这里插入图片描述
    在这里插入图片描述

实在是太晚了,熬不了了,下次再总结补上吧。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐