一、原料:
SQLyog、语句文件
语句文件如下:
------------------------------------------------------开始-------------------------------------------------------------
#1.创建测试数据库 tmp
CREATE DATABASE tmp;
#2. 创建表dept
CREATE TABLE dept( deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, dname VARCHAR(20) NOT NULL DEFAULT "", loc VARCHAR(13) NOT NULL DEFAULT "" );
#3.创建表EMP雇员
CREATE TABLE emp (empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, ename VARCHAR(20) NOT NULL DEFAULT "", job VARCHAR(9) NOT NULL DEFAULT "", mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, hiredate DATE NOT NULL, sal DECIMAL(7,2) NOT NULL, comm DECIMAL(7,2) NOT NULL, deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 );
#4,工资级别表
CREATE TABLE salgrade ( grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, losal DECIMAL(17,2) NOT NULL, hisal DECIMAL(17,2) NOT NULL );
INSERT INTO salgrade VALUES (1,700,1200); INSERT INTO salgrade VALUES (2,1201,1400); INSERT INTO salgrade VALUES (3,1401,2000); INSERT INTO salgrade VALUES (4,2001,3000); INSERT INTO salgrade VALUES (5,3001,9999); -- 默认情况下,不可能等到用户把这些语句全部输入完之后,再执行整段语句。 -- 因为MySQL一遇到分号,它就要自动执行 -- 这种情况下,就需要事先把delimiter换成其它符号,如//或$$
#定义一个新的命令结束符合,因为函数语句中有分号,容易发生错误
DELIMITER $$
DELIMITER $$
#这里我创建了一个函数,名为 rand_string,可以随机返回指定个数的字符串
CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255) #返回一个字符串 BEGIN DECLARE i INT DEFAULT 0; SET i = FLOOR(10+RAND()*500); RETURN i; END $$
#5.创建一个存储过程,可以添加雇员
CREATE PROCEDURE insert_emp(IN START INT(10),IN max_num INT(10)) BEGIN DECLARE i INT DEFAULT 0; #SET autocommit = 0,把autocommit设置成0,含义是不要自动提交
SET autocommit = 0;#默认不提交sql语句
REPEAT SET i = i + 1;
#5.通过前面写的函数随机生成字符串和部门编号,然后加入emp表
INSERT INTO emp VALUES((START+i),rand_string(6),'SALESMAN',0001,CURDATE(),2000,400,rand_num()); UNTIL i = max_num END REPEAT;
#commit整体提交所有的sql语句,提高效率
COMMIT; END $$
#6.添加10 0000数据,编号从100001开始
CALL insert_emp(100001,110000)$$
#命令结束符,再重新设置为;
DELIMITER ;
------------------------------------------------------结束-------------------------------------------------------------
二、存在的问题
SQLyog如果是试用版的话,会出现最大只能生成1000条记录的问题