mysql随机不连续数据_用MySQL里的Rand()生成 不连续重复 的随机数年龄以及随机姓名字符串...

本文介绍了一个MySQL存储过程,用于生成不连续、不重复的随机姓名和年龄数据。然而,实际执行结果中出现了姓名连续重复的问题。存储过程中使用了RAND()函数和字符串截取方法来创建随机姓名,但随机性不足导致了错误的结果。
摘要由CSDN通过智能技术生成

前言:RAND函数,返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。一,朋友问题描述如下:(1),有一个用户表,有id,用户的真实名字,年龄。通过一段存储过程来实现向表里插入100数据,其中年龄随机姓名姓氏:’赵钱孙李周吴郑王’;,随机取出一个名字:’一段文字字符串’,随机的取出一个字或者两个字要求:随机的名字不能出现连续重复。(2),然后我写出的代码如下:-- 创建用户表,在project里create table user1 (id int not null primary key auto_increment,name varchar(3) not null,age tinyint not null) charset utf8;-- 创建存储过程delimiter $$create procedure pro3(num int)begindeclare fname char(1);declare name1 char(1);declare name2 char(1);declare fullname varchar(3);declare age int;declare i int default 1;while i <=num doset fname = substring('赵钱孙李周吴郑王',floor(1+8*rand()),1);  -- 姓set name1 = substring('一二三四五六七八九十甲乙丙丁',floor(1+14*rand()),1); -- 抽一个字set name2 = substring('一二三四五六七八九十甲乙丙丁',floor(1+14*rand()),1); -- 抽一个字if round(rand())=0 then  -- 创造一个局部变量fullname代表全名,随机确定是两个字还是三个字set fullname = concat(fname,name1);end if;if round(rand())=1 thenset fullname = concat(fname,name1,name2);end if;set age = floor(20+31*rand());  -- 年龄为20-50的随机insert into user1 values(null,fullname,age);  -- 插入数据set i = i + 1;end while;end$$delimiter ;(3),执行结果call pro3(100); -- 执行过程出现的结果出乎意料,出现了很多连续一样的姓名,执行结果如下:mysql> select * from user1;+-----+--------+-----+| id  | name   | age |+-----+--------+-----+|   1 | 赵三       |  28 ||   2 | 孙一四      |  50 ||   3 | 郑丁九      |  42 ||   4 | 王八       |  47 ||   5 | 钱六      |  48 ||   6 | 李五       |  26 ||   7 | 李五       |  41 ||   8 | 郑二三      |  22 ||   9 | 孙七六       |  24 ||  10 | 孙三       |  21 ||  11 | 钱甲二     |  26 ||  12 | 孙丙       |  42 ||  13 | 孙丙       |  37 ||  14 | 赵六丁     |  24 ||  15 | 赵六丁       |  40 ||  16 | 王十七      |  28 ||  17 | 孙九       |  22 ||  18 | 李二       |  23 ||  19 | 李十      |  23 ||  20 | 赵丁甲      |  50 ||  21 | 钱一九     |  49 ||  22 | 钱一九     |  22 ||  23 | 钱一九     |  30 ||  24 | 钱一九     |  30 ||  25 | 孙五       |  46 ||  26 | 吴三十      |  39 ||  27 | 赵七二      |  50 ||  28 | 赵七二      |  29 ||  29 | 孙甲九      |  20 ||  30 | 郑乙十     |  35 ||  31 | 周一      |  50 ||  32 | 吴甲七       |  50 ||  33 | 李丁十     |  47 ||  34 | 李丁十     |  29 ||  35 | 李丁十     |  40 ||  36 | 孙五       |  47 ||  37 | 赵九丙     |  41 ||  38 | 郑三八      |  43 ||  39 | 钱七      |  37 ||  40 | 钱二一     |  24 ||  41 | 王七五       |  45 ||  42 | 李十四      |  24 ||  43 | 李十四      |  28 ||  44 | 孙甲甲      |  49 ||  45 | 郑五      |  38 ||  46 | 赵甲      |  27 ||  47 | 王三       |  39 ||  48 | 王三       |  26 ||  49 | 王三       |  22 ||  50 | 王三       |  30 ||  51 | 钱一九     |  44 ||  52 | 赵四       |  30 ||  53 | 王十九      |  50 ||  54 | 王十九      |  34 ||  55 | 王十九      |  40 ||  56 | 周丙甲      |  20 ||  57 | 孙十      |  47 ||  58 | 王丙       |  32 ||  59 | 王六       |  43 ||  60 | 吴三甲       |  29 ||  61 | 王乙       |  26 ||  62 | 赵甲      |  46 ||  63 | 赵甲      |  23 |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值