mysql 用存储过程批量生成人员信息

        学习了《mysql 存储过程和函数》,进行实战。        

        要测验sql的执行情况,因为建个大量数据。因此考虑用过程/函数的方式来处理。

人员表

DROP TABLE IF EXISTS staff;
CREATE TABLE staff (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(20) DEFAULT NULL,
  dep_id int(11) DEFAULT NULL,
  age int(11) DEFAULT NULL,
  salary decimal(10,2) DEFAULT NULL,
  cus_id int(11) DEFAULT NULL,
  PRIMARY KEY (id) 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

 人名用随机字符串来生成。

随机字符串

#随机生成一个指定个数的字符串
DELIMITER //
CREATE FUNCTION rand_str(n INT) RETURNS VARCHAR(255)
BEGIN
# 声明一个str 包含52个字母
DECLARE str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
# 记录当前是第几个
DECLARE i INT DEFAULT 0;
# 生成的结果
DECLARE res_str VARCHAR(255) DEFAULT '';
WHILE i < n DO
  SET res_str = CONCAT(res_str, SUBSTR(str,FLOOR(1 +RAND()*52),1));
  SET i=i+ 1;
END WHILE;
RETURN res_str;
END //

DELIMITER ;

如果报错:

This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

设置:

SET GLOBAL log_bin_trust_function_creators = TRUE;

存储过程

DELIMITER //
CREATE PROCEDURE insert_staff(IN max_num INT)
BEGIN
DECLARE i INT DEFAULT 0;
  SET autocommit = 0;
  REPEAT
    SET i=i+ 1;
    INSERT INTO staff(NAME, dep_id, age, salary, cus_id) 
    VALUES(rand_str(5), FLOOR(1 + RAND()*10), FLOOR(20 + RAND()*10),
    FLOOR(6000 + RAND()*10), FLOOR(1+RAND()*10));
  UNTIL i = max_num
  END REPEAT;
  COMMIT;
END //


DELIMITER ;

调用

-- 插入9千万的数据
CALL insert_staff(90000000);

    这个执行时间会比较长,要等待一段数据。

总结:

        如果要生成大量的测试数据,可以考虑用存储过程或者函数的方式来处理,用随机字符串和数字来进行处理。

        上一篇:  《mysql 存储过程和函数

        下一篇: 《》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狼1222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值