在日常的学习工作中,我们常常需要为数据库创建一些测试用数据方便我们测试数据库的性能。一条条插入显然效率低下,在这里我们需要使用存储过程
存储过程简单来说就是为以后的使用而保存的一条或者多条MySQL语句的集合。可以将其视为批处理文件,但是它们的作用不仅限于批处理。
首先使用命令查看创建样例表的SQL语句:
SHOW CREATE TABLE tablename;
以下是创建样例表的SQL语句:
CREATE TABLE `test` (
`num` int(11) NOT NULL AUTO_INCREMENT,
`ordnum` int(10) NOT NULL,
`ordname` char(50) NOT NULL,
`orddate` datetime NOT NULL,
`note` text,
PRIMARY KEY (`num`),
KEY `num` (`num`, `ordnum`)
) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARSET = latin1
接着是创建存储过程的SQL语句:
USE study; --绑定数据库
DROP PROCEDURE IF EXISTS random_str; --如果存在存储过程则删除
DELIMITER $$ --修改分隔符以确保存储过程中的分隔符;被传递正确
CREATE PROCEDURE random_str() --创建无参无返回值存储过程
BEGIN
DECLARE n DECIMAL(10) DEFAULT 0 ; --声明一个变量n
DECLARE char_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
WHILE n < 10 do --开始循环
INSERT INTO test(ordnum,ordname,orddate,note) VALUES(rand()*50,
substring(char_str, FLOOR(1 + RAND()*60), 10),
concat('2013-10-01 ', Floor(10+RAND()*10),':',
floor(10+RAND()*49),':',floor(10+RAND()*49)),
substring(char_str, FLOOR(1 + RAND()*60), 10));
set n = n+1;
END while ; --结束循环
END;$$ --结束存储过程
DELIMITER ; --修改分隔符为;
定义完存储过程之后我们便可以对存储过程经行调用,存储过程会自动为我们在测试表中插入希望的测试用数据:
CALL random_str();
结果如图所示: