AI智能
改变未来

MySQL批量创建测试数据实例教程

案例:给数据库database下的score表增加10000条测试数据。

一、准备工作

工具下载:SQLyog,参考文章SQLyog入门教程:安装与使用

二、SQL语句

[code]DROP PROCEDURE IF EXISTS proc_initData;DELIMITER $CREATE PROCEDURE proc_initData()BEGINDECLARE i INT DEFAULT 1;WHILE i<=10000 DOINSERT INTO score(id,course,teacher,marks,grade,examdate)VALUES(i,ELT(CEILING(RAND()*3), \'语文\', \'数学\', \'英语\'),CASE course WHEN \'语文\' THEN \'张三\' WHEN \'数学\' THEN ELT(CEILING(RAND()*2), \'李四\', \'王五\') WHEN \'英语\' THEN \'Tony\' END,FLOOR(RAND()*101),CASE WHEN marks > 90 THEN \'优秀\' WHEN marks > 80 THEN \'良好\' WHEN marks >= 60 THEN \'及格\' ELSE \'不及格\' END,DATE_FORMAT(DATE_SUB(NOW(), INTERVAL FLOOR(RAND()*30) DAY),\'%Y-%m-%d\'));SET i = i+1;END WHILE;END $DELIMITER;CALL proc_initData();

三、思路分析

1、查看表的创建语句创建新表

为预防出错,我们不在原表上进行操作,而是通过查询原表的创建语句新建一张相同的test_score表。

[code]SHOW CREATE TABLE `score`;    \'查看原表score的创建语句\'创建新表test_scoreCREATE TABLE `test_score` (`id` VARCHAR(4) NOT NULL COMMENT \'学号\',`course` VARCHAR(20) DEFAULT NULL COMMENT \'学科\',`teacher` VARCHAR(20) DEFAULT NULL COMMENT \'教师\',`marks` INT DEFAULT 0 COMMENT \'分数\',`grade` VARCHAR(20) DEFAULT NULL COMMENT \'等级\',`examdate` DATE DEFAULT NULL COMMENT \'考试日期\',PRIMARY KEY (`id`)) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT=\'成绩表\';

2、存储过程批量插入数据

简易的存储过程如下:

[code]\'创建MySQL存储过程DROP PROCEDURE IF EXISTS proc_initData;DELIMITER $CREATE PROCEDURE proc_initData()BEGINDECLARE i INT DEFAULT 1;WHILE i<=10 DOINSERT INTO test_score(id) VALUES(i);SET i = i+1;END WHILE;END $DELIMITER;\'调用存储过程CALL proc_initData();

3、优化存储过程中的插入语句,给所有字段设值。

>> 查询表所有字段名

[code]SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = \'test_score\' AND TABLE_SCHEMA = \'database\';    \'查看database数据库下test_score表所有字段名

>> 查询字段的不同值

[code]SELECT DISTINCT course FROM `test_score`;    \'查看test_score表的course字段的不同值 

>> 随机插入指定内容

ELT(n, str1, str2, str3,…): 如果n=1,则返回str1;如果n=2,则返回str2;依次类推。如果n小于1或大于参数个数,返回NULL。

CEILING(RAND()*n): 随机生成[1-n]范围内的一个整数。

[code]ELT(CEILING(RAND()*3), \'语文\', \'数学\', \'英语\')    \'在语文、数学、英语中随机取值

>> 分类判断:Case函数的两种格式

[code]CASE course WHEN \'语文\' THEN \'张三\' WHEN \'数学\' THEN ELT(CEILING(RAND()*2), \'李四\', \'王五\') WHEN \'英语\' THEN \'Tony\' ENDCASE WHEN marks > 90 THEN \'优秀\' WHEN marks > 80 THEN \'良好\' WHEN marks >= 60 THEN \'及格\' ELSE \'不及格\' END

>> 取某一范围随机数

FLOOR(i + RAND() * (j – i + 1)) : 随机生成[i, j]范围内的一个整数。

[code]FLOOR(RAND()*101)    \'随机生成[0, 100]范围内的整数

4、 清除表数据

DELETE FROM `table_name`; 

5、删除测试表

DROP TABLE table_name; 

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » MySQL批量创建测试数据实例教程