mysql 隨機生成姓名函數,及模擬大量測試數據


如下圖所示,函數rand_name,過程insert_user;

-- 開啟允許創建函數
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 ; 

-- 調用函數
select rand_name(1);

-- 創建測試表 study_user
create table study_user (
	id int not null auto_increment ,
	name varchar(16) default null,
	age int default 0,
	salary int default 0,
	primary key (id)
) engine = innodb default charset = utf8

-- 創建新增測試數據存儲過程 insert_user(max_num)
delimiter $$

create PROCEDURE insert_user(in num int)
begin
    -- 記錄循環次數
    declare i int default 0;
    -- 關閉自動提交
    set autocommit = 0;
    -- 循環insert
    while i < num do
	    insert into study_user(name, age, salary) values 
	    (rand_name(1), floor(15 + rand()*10), floor(rand()*10000 + rand()*1000));
	    set i = i + 1;
    end while;
    commit;

end$$
delimiter ;

-- 查詢結果
call insert_user(100);
select * from study_user;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM