mysql模拟大量数据

1,创建表

id name sex phone birthplace grade
唯一、自增 姓名 性别 11位手机号、唯一 籍贯 年级
create table student(
    id int(4) primary key not null auto_increment,
    name varchar(32) not null,
    sex varchar(2) not null,
    phone varchar(32) not null unique,
    brithplace varchar(32) not null,
    grade int(1) not null
);

2,创建函数

编写生成电话号码的函数:

DELIMITER $$ 
create function generate_phone()
returns varchar(11)
begin
    declare phone varchar(11) default "1";    
    declare i int default 0; 
    set phone = concat(phone, elt(ceiling((rand()*10))%4+1,"3","5","7","8"));    
    while i < 9
    do
       set phone = concat(phone, elt(ceiling((rand()*10)),"0","1","2","3","4","5","6","7","8","9"));
       set i = i + 1;
    end while; 
    return phone;
end ;$$
DELIMITER ;

随机生成年级的函数:

DELIMITER $$ 
create function generate_grade()
returns int(1)
begin
    return ceiling((rand()*10))%9+1;
end $$
DELIMITER ;

随机生成性别的函数:

DELIMITER $$ 
create function generate_sex()
returns varchar(2)
begin
    return elt(ceiling(rand()*2), "男","女");
end $$
DELIMITER ;

随机生成出生地的函数:

DELIMITER $$ 
create function generate_brithplace()
returns varchar(32)
begin
    return  elt(ceiling(rand()*100)%34+1,"河北省","山西省","辽宁省","吉林省","黑龙省","江苏省","浙江省","安徽省","福建省","江西省","山东省","河南省","湖北省","湖南省","广东省","海南省","四川省","贵州省 ","云南省","陕西省","甘肃省","青海省","台湾省","北京市","上海市","重庆市","天津市","广西","宁夏","西藏","新疆","内蒙古","香港","澳门");
end $$
DELIMITER ;

随机生成男孩名字的函数:

DELIMITER $$ 
create function generate_boyname() returns varchar(2)
begin
    declare name varchar(2) default '';
    declare i int default 0;
    declare n int default 0;    
    set n = ceiling(rand()*2);    
    while i < n
    do
       set name = concat(name, elt(ceiling(rand()*1000)%200+1,"辰","逸","雨","泽","瑾","瑜","圣","杰","楷","瑞","浩","南","卡","思","旭","尧","俊","楠","天","磊","烨","伟","世","博","昊","哲","瀚","冠","明","辉","金","傲","越","材","霖","朋","健","柏","鸿","涛","懿","轩","鹏","煊","彬","益","弘","宸","苑","君","文","鑫","睿","渊","达","强","晓","啸","风","桦","驰","松","德","振","豪","鹤","绍","鼎","寒","志","靖","琪","擎","宇","国","龙","厉","诚","翰","超","晟","棋","沙","欧","智","劲","祺","皓","新","泰","佑","致","韵","舟","玮","伦","然","炫","星","野","雪","嘉","煜","城","昌","建","平","炎","峻","熙","洋","荣","展","远","图","翱","依","海","震","康","锋","崇","杭","运","贤","元","盛","江","春","凯","胜","福","来","聚","原","才","邦","庆","生","月","阳","岩","浪","晋","玄","欢","恒","羽","恩","青","余","波","修","永","润","若","信","勋","琦","晨","杉","畅","凡","翎","承","淘","茂","石","鉴","尚","唯","仁","敬","玉","全","帆","影","云","观","雷","常","柯","倚","向","镇","言","耀","耿","古","闻","名","东","悠","昆","宝","复","乔","柳","林","均"));
       set i = i + 1;
    end while;
    return name;
end ; $$
DELIMITER ;

随机生成一个女孩的名字:

DELIMITER $$ 
create function generate_girlname() returns varchar(2)
begin
    declare name varchar(2) default '';
    declare i int default 0;
    declare n int default 0;    
    set n = ceiling(rand()*2);    
    while i < n
    do
       set name = concat(name, elt(ceiling(rand()*1000)%200+1,"静","敏","燕","艳","丽","娟","莉","芳","萍","玲","娜","丹","洁","红","颖","琳","霞","婷","慧","莹","晶","华","倩","英","佳","梅","雪","蕾","琴","璐","伟","云","蓉","青","薇","欣","琼","宁","平","媛","虹","杰","婧","雯","茜","楠","洋","君","辉","菲","琦","妍","阳","波","俊","鑫","磊","军","爽","兰","晨","冰","瑶","瑾","岩","瑛","悦","群","玮","欢","瑜","蕊","宇","明","珊","荣","超","琪","玉","怡","文","岚","杨","婕","旭","凤","健","芬","芸","晓","萌","飞","露","菁","惠","宏","瑞","蓓","林","璇","珍","月","利","勤","清","帆","迪","微","斌","娇","影","巍","朋","莎","彬","峰","昕","乐","星","新","烨","晖","卉","晴","曼","越","靖","维","晔","艺","睿","芹","淼","黎","畅","椒","鹏","春","彦","柳","梦","毅","妮","坤","翠","然","钰","蔚","曦","茹","凌","扬","凡","美","彤","园","炜","捷","亮","叶","苗","菊","勇","锐","雨","力","翔","庆","方","琰","聪","潇","威","甜","帅","进","琛","花","雅","立","姣","馨","珏","秀","亚","珂","思","哲","冉","骊","双","娅","胡","培","斐","嘉","莲","莺","佩","剑"));
       set i = i + 1;
    end while;
    return name;
end ; $$
DELIMITER ;

根据性别随机生成一个姓名:

DELIMITER $$ 
create function generate_name(sex varchar(2))
returns varchar(3)
begin
    declare firstname varchar(2) default '';
    declare lastname varchar(2) default '';    
    set firstname = elt(ceiling(rand()*1000)%200+1,"赵","钱","孙","李","周","吴","郑","王","冯","陈","卫","蒋","沈","韩","杨","朱","秦","尤","许","何","吕","施","张","孔","曹","严","华","金","魏","陶","姜","戚","谢","邹","喻","柏","水","窦","章","云","苏","潘","葛","范","彭","郎","鲁","韦","昌","马","苗","凤","花","方","俞","任","袁","柳","鲍","史","唐","费","廉","岑","薛","雷","贺","倪","汤","滕","殷","罗","毕","郝","邬","安","常","乐","于","时","傅","皮","卞","齐","康","伍","余","元","卜","顾","孟","平","黄","和","穆","萧","尹","姚","邵","湛","汪","祁","毛","禹","狄","米","贝","明","臧","计","伏","成","戴","谈","宋","茅","庞","熊","纪","舒","屈","项","祝","董","梁","杜","阮","蓝","席","季","麻","强","贾","路","娄","危","江","童","颜","郭","梅","盛","林","刁","钟","徐","邱","骆","高","夏","蔡","田","樊","胡","凌","霍","虞","万","支","柯","昝","管","卢","莫","经","房","裘","缪","干","解","应","宗","丁","宣","贲","邓","郁","单","杭","洪","包","诸","左","石","崔","吉","钮","龚","程","嵇","邢","滑","裴","陆","荣","翁","荀","羊","于","惠");
    
    if ( sex = "男" ) then
        set lastname = generate_boyname();    
    else
        set lastname = generate_girlname();   
    end if;
    
    return concat(firstname, lastname);
end $$
DELIMITER ;

3,编写过程:

DELIMITER @
create procedure proc_data (in total int)
begin 
declare i int default 1;
declare phone varchar(32);
declare sex varchar(2);
declare continue handler for 1062 
begin
    select concat(i) "count", concat("phone ", phone, " alrady exist") "info"; 
    set i = i - 1 ;
end; 
while i <= total do
    set phone = generate_phone();
    set sex = generate_sex();
    insert into student(name, sex, phone, brithplace, grade) values(generate_name(sex), sex, phone, generate_brithplace(), generategrade());
    set i = i + 1 ;
end while;
end;@
DELIMITER ;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章