mysql生成20万条数据(连表插入)

  • 创建一个存储过程

    DELIMITER $$ -- 设置定界符为$$,与';'意思相同,防止相同符号产生冲突
    
    USE `yunkc_base1`$$ -- 使用数据库
    
    DROP PROCEDURE IF EXISTS `insert_test`$$ -- 如果存在insert_test存储过程名字,则删除
    
    CREATE DEFINER=`ykcbase`@`%` PROCEDURE `insert_test`() -- 设置存储过程的权限
    BEGIN		-- 开始
      DECLARE i INT; 	-- 定义一个i的int变量
      SET i = 0;		-- 设置i的值为0
      SET @id = 3;		-- 设置一个id变量,全局
      START TRANSACTION;	-- 开启事务
      WHILE		-- 循环
        i < 200001 DO	-- 当i的值小于200001的时候执行 do
        INSERT INTO `base_s_t_charging_user` (	-- 插入语句
          `user_account`,
          `vehicle_org_id`,
          `user_nick_name`,
          `user_avatar`,
          `user_phone`,
          `user_district_id`,`is_ykc`
    
        )
        VALUES
          (
            CONCAT('yh', @id := @id + 1),	-- 用户自增 拼接'yh1'
            163,
            generateUserName (),	-- 外部函数,用来生成用户名
            '',
            generatePhone (),		-- 外部函数,用来生成手机号
            119,1
          );
        INSERT INTO `base_d_t_charging_user_operation_info` (`user_id`, `user_card_no`,`multiple_charge`,`user_freeze_status`)
        VALUES
          (LAST_INSERT_ID(), generatePhone (),500102,600102);	-- LAST_INSERT_ID(),mysql内部函数,获取上一条插入语句的值
        SET i = i + 1;	-- 执行完一次,i++,保证数据不重复
      END WHILE;	-- 结束循环
      COMMIT;	-- 事务一次性提交
    END$$	-- 结束
    
    DELIMITER ; -- 告诉mysql,$$ 定界符已经使用结束了,重新赋值为';'
    
  • 生成姓名函数

    DELIMITER $$
    
    CREATE FUNCTION `yunkc_base1`.`generateUserName` () RETURNS varchar(255) CHARSET utf8 DETERMINISTIC 	 -- 创建函数generateUserName() RETURNS 返回值类型为varchar(255),字符集utf8
    BEGIN	-- 开始
      DECLARE xing VARCHAR (2056) DEFAULT '赵钱孙李周郑王冯陈楮卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闽席季麻强贾路娄危江童颜郭梅盛林***锺徐丘骆高夏蔡田樊胡凌霍虞万支柯昝管卢莫经裘缪干解应宗丁宣贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁';	-- 定义姓
      DECLARE ming VARCHAR (2056) DEFAULT '嘉懿煜城懿轩烨伟苑博伟泽熠彤鸿煊博涛烨霖烨华煜祺智宸正豪昊然明杰诚立轩立辉峻熙弘文熠彤鸿煊烨霖哲瀚鑫鹏致远俊驰雨泽烨磊晟睿天佑文昊修洁黎昕远航旭尧鸿涛伟祺轩越泽浩宇瑾瑜皓轩擎苍擎宇志泽睿渊楷瑞轩弘文哲瀚雨泽鑫磊梦琪忆之桃慕青问兰尔岚元香初夏沛菡傲珊曼文乐菱痴珊恨玉惜文香寒新柔语蓉海安夜蓉涵柏水桃醉蓝春儿语琴从彤傲晴语兰又菱碧彤元霜怜梦紫寒妙彤曼易南莲紫翠雨寒易烟如萱若南寻真晓亦向珊慕灵以蕊寻雁映易雪柳孤岚笑霜海云凝天沛珊寒云冰旋宛儿绿真盼儿晓霜碧凡夏菡曼香若烟半梦雅绿冰蓝灵槐平安书翠翠风香巧代云梦曼幼翠友巧听寒梦柏醉易访旋亦玉凌萱访卉怀亦笑蓝春翠靖柏夜蕾冰夏梦松书雪乐枫念薇靖雁寻春恨山从寒忆香觅波静曼凡旋以亦念露芷蕾千兰新波代真新蕾雁玉冷卉紫山千琴恨天傲芙盼山怀蝶冰兰山柏翠萱乐丹翠柔谷山之瑶冰露尔珍谷雪乐萱涵菡海莲傲蕾青槐冬儿易梦惜雪宛海之柔夏青亦瑶妙菡春竹修杰伟诚建辉晋鹏天磊绍辉泽洋明轩健柏煊昊强伟宸博超君浩子骞明辉鹏涛炎彬鹤轩越彬风华靖琪明诚高格光华国源宇晗昱涵润翰飞翰海昊乾浩博和安弘博鸿朗华奥华灿嘉慕坚秉建明金鑫锦程瑾瑜鹏经赋景同靖琪君昊俊明季同开济凯安康成乐语力勤良哲理群茂彦敏博明达朋义彭泽鹏举濮存溥心璞瑜浦泽奇邃祥荣轩'; -- 定义名
      DECLARE I_xing INT DEFAULT LENGTH(xing) / 3; 	-- 定义姓的下标
      DECLARE I_ming INT DEFAULT LENGTH(ming) / 3;	-- 定义名的下标
      DECLARE return_str VARCHAR (2056) DEFAULT '';	-- 定义默认的返回值
      SET return_str = CONCAT(
        return_str,
        SUBSTRING(xing, FLOOR(1 + RAND() * I_xing), 1)	-- 截取xing集合中的随机一个下标,取一位(字符下标从1开始)
      );
      SET return_str = CONCAT(
        return_str,
        SUBSTRING(ming, FLOOR(1 + RAND() * I_ming), 1)
      );
      IF RAND() > 0.400			-- 如果随机函数值大于0.4.则添加第3个名字
      THEN SET return_str = CONCAT(
        return_str,
        SUBSTRING(ming, FLOOR(1 + RAND() * I_ming), 1)
      );
      END IF;		-- 结束if语句
      RETURN return_str;		-- 返回执行结果
    END $$		-- 结束
    
    DELIMITER ;	-- 重新定义定界符为';'
    
  • 生成手机号函数

    DELIMITER $$
    
    CREATE FUNCTION `yunkc_base1`.`generatePhone` () RETURNS char(11) CHARSET utf8
    DETERMINISTIC
    BEGIN
      DECLARE head VARCHAR (100) DEFAULT '000,156,136,176';
      DECLARE content CHAR(10) DEFAULT '0123456789';
      DECLARE phone CHAR(11) DEFAULT SUBSTRING(head, 1+ (FLOOR(1 + (RAND() * 3)) * 4), 3);
      #SET phone = CONCAT(phone, substring('156,136,123,456,789', 1+(FLOOR(1 + (RAND() * 4))*4), 3));
       DECLARE i INT DEFAULT 1;
      DECLARE len INT DEFAULT LENGTH(content);
      WHILE
        i < 9 DO SET i = i + 1;
        SET phone = CONCAT(
          phone,
          SUBSTRING(content, FLOOR(1 + RAND() * len), 1)
        );
      END WHILE;
      RETURN phone;
    END $$
    
    DELIMITER ;
    
posted @ 2019-02-13 15:03  lisongyu  阅读(1605)  评论(0编辑  收藏  举报