MySQL 通过存储过程生成带有随机姓名的百万条测试数据

建表语句

CREATE TABLE `users` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

存储过程

DELIMITER $$

DROP PROCEDURE IF EXISTS `batch_insert`$$

CREATE PROCEDURE `batch_insert`(IN number INT)
BEGIN
  DECLARE i INT DEFAULT 0;
  SET autocommit=0;
  WHILE
    i < number DO
    INSERT INTO users (NAME)
    VALUES
      ('');
    SET i = i + 1;
  END WHILE;
  SET @surname = '赵钱孙李周吴郑王冯陈诸卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花';
  SET @NAME =  '卓阳裕寅谛锐皓芃琛卓皓寅沛佳升郁文天安祜锋澄星梓贤泽福允';
  SET @NAME2 =  '卓阳裕钊年哲中权鹤信材喆锦谷锟栋芃荣胤烁伟日帆权博澄韦然';
  
  UPDATE
    users
  SET
    `name` = CONCAT(
      SUBSTR(
        @surname,
        FLOOR(RAND() * LENGTH(@surname) / 3+1),
        1
      ),
      SUBSTR(
        @NAME,
        FLOOR(RAND() * LENGTH(@NAME) / 3+1),
        1
      ),
      SUBSTR(
        @NAME2,
        FLOOR(RAND() * LENGTH(@NAME2) / 3+1),
        1
      )
    );
    COMMIT;

END$$

DELIMITER ;

调用

TRUNCATE TABLE users; -- 截断表
CALL `batch_insert`(1000000); -- 1百万条数据

因为要随机生成名称,且当数据量大的时候难免会产生重名重姓的时候, 所以如果要不重复的话,可以使用该网站 生成随机名称 生成名称后拼接。
我这里生成了一些字符串,可以复制过去。

平斌良辞嘉寅子侠皓寅凯梁锋鹤晓颜谛贤铭年楷杰谛郁凯辞允芃安安梓年天谛哲澄裕腾禄年杰盛成嘉楷锟濡康星诚锐禧锦权帝宇哲谷祯皓祯睿瑞澄博鑫峰峰子远钊祜沛材允振炳暄禧俊烁禄峰楷康鑫邦栋铭谛鑫加谛福

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值