MySQL数据库造数

1. 随机生成姓名

1.1 函数

-- 开启允许创建
set global log_bin_trust_function_creators = 1;
	
-- 创建随机生成姓名 rand_name
delimiter $$
create function rand_name(n int) returns varchar(16)
begin
    -- 初始化一个16姓氏字符串,作为姓氏字符库
    declare family_str varchar (128) default '赵钱孙李周吴郑王冯陈蒋沈韩杨朱秦';
    -- 初始化一个32名字字符串,作为名字字符库
    declare name_str varchar (128) default '平书文若山向秋凡白斌绮烟从蕾天曼润又亦从语绮彤之玉凡梅依琴沛槐敏';
    -- 记录当前是第几个
    declare i int default 0;
    -- 记录生成结果
    declare full_name varchar(16) default '';
    -- 随机名字1、2位标记
    declare rand_num int DEFAULT 0;

    while i < n do
	    -- 若获取多个姓名,则用逗号','区分
	    set full_name = if(i > 0, concat(full_name, ','), full_name);
	    -- 随机取姓氏
	    set full_name = concat(full_name, SUBSTR(family_str, floor(1+rand()*16), 1));
	    -- 随机取名字
	    set full_name = concat(full_name, SUBSTR(name_str, floor(1+rand()*16), 1));
	    -- 名字是否为双字
	    set rand_num = rand()*10;
	    set full_name = if(rand_num > 5, concat(full_name, SUBSTR(name_str, floor(1+rand()*16), 1)), full_name);
	    set i = i + 1;
    end while;

    return full_name;

end$$ 
delimiter ; 

1.2 调用

rand_name(1);

2. 生成固定长度随机字符串

2.1 函数

delimiter $$
CREATE FUNCTION rand_string(n int) RETURNS varchar(255) 
begin        
  declare chars_str varchar(100) 
  default "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  declare return_str varchar(255) default "";        
  declare i int default 0;
  while i < n do        
      set return_str=concat(return_str,substring(chars_str,floor(1+rand()*62),1));
      set i= i+1;        
  end while;        
  return return_str;    
end $$
delimiter ;

2.2 调用

-- 传参为随机字符的长度
rand_string(20)

3. 随机数值

3.1 函数集

--随机生成 0~1 之间的小数(0<1)无需传参
RAND()
--向上取整,可嵌套RAND()使用
CEILING()
--向下取整,可嵌套RAND()使用
FLOOR()
--保留指定小数位数,可嵌套RAND()使用
ROUND()
--返回指定字符串的MD5值
MD5()

3.2 函数应用

ROUND()得到指定范围的随机数

round(rand()*(max - min)+ min)

FLOOR()得到指定范围的随机数

FLOOR(min + RAND() * (max – min + 1))

使用md5()产生32位随机字符串

--内层使用上述函数进行嵌套即可
MD5(RAND() * 10000)

4. 随机手机号

我国使用的手机号码为11位,其中每段编码代表含义不同:
前3位:网络识别号(运营商代码)
4到7位:归属地区代码
8到11位:用户代码

4.1 函数

delimiter $$
CREATE  FUNCTION `random_mobile`() RETURNS char(11) CHARSET utf8
    DETERMINISTIC
BEGIN
    DECLARE head VARCHAR(100) DEFAULT '000,156,136,176,183';
    DECLARE content CHAR(10) DEFAULT '0123456789';
    DECLARE phone CHAR(11) DEFAULT substring(head, 1+(FLOOR(1 + (RAND() * 3))*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 ;

4.2 调用

random_mobile()

5. 随机日期

5.1 函数

DATE_ADD(date,INTERVAL expr type)  # 给日期添加指定的时间间隔。
DATE_SUB(date,INTERVAL expr type)  # 给日期减少指定的时间间隔

5.2 示例

update booking 
set createTime=DATE_ADD('2021-01-01 00:00:00',  INTERVAL  FLOOR(1 + (RAND() * 18144000))   SECOND ) ;

5.3 补充说明

date : 指定的日期
INTERVAL : 关键字
expr:是具体的时间间隔
type:是时间单位。
注意:type可以复合型的,比如YEAR_MONTH

Type值含义
MICROSECOND间隔单位:毫秒
SECOND间隔单位:秒
MINUTE间隔单位:分钟
HOUR间隔单位:小时
DAY间隔单位:天
WEEK间隔单位:星期
MONTH间隔单位:月
QUARTER间隔单位:季度
YEAR间隔单位:年
SECOND_MICROSECOND复合型,间隔单位:秒、毫秒,expr可以用两个值来分别指定秒和毫秒
MINUTE_MICROSECOND复合型,间隔单位:分、毫秒
MINUTE_SECOND复合型,间隔单位:分、秒
HOUR_MICROSECOND复合型,间隔单位:小时、毫秒
HOUR_SECOND复合型,间隔单位:小时、秒
HOUR_MINUTE复合型,间隔单位:小时分
DAY_MICROSECOND复合型,间隔单位:天、毫秒
DAY_SECOND复合型,间隔单位:天、秒
DAY_MINUTE复合型,间隔单位:天、分
DAY_HOUR复合型,间隔单位:天、小时
YEAR_MONTH复合型,间隔单位:年、月

6. 批量往表中插入数据

示例

创建函数

delimiter $$
CREATE  PROCEDURE `insert_data`(IN n int)
BEGIN  
  DECLARE i INT DEFAULT 1;
    WHILE (i <= n ) DO
		INSERT into customer_info (customer_name,customer_id,sex,certificate_type,id_number)
		VALUEs (rand_name(1),rand_string(20),floor(1 + (rand() * 2)),floor(1 + (rand() * 2)),concat(floor(rand()*100000000000),UPPER(left(UUID(),3)),floor(rand()*100)));
    	set i=i+1;
 	END WHILE;
END $$
delimiter ;

插入10万条数据

call insert_data(1000000);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一&粟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值