如下圖所示,函數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;
