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

三,执行改动后的存储过程,查看效果

执行结果如下:

1.MySQL> DELIMITER $$

2.mysql> USE `test`$$

3.Database changed

4.mysql> DROP PROCEDURE IF EXISTS `pro3`$$

5.Query OK, 0 rows affected, 1 warning (0.00 sec)

6.

7.mysql> CREATE PROCEDURE `pro3`(num INT)

8.    -> BEGIN

9.    -> DECLARE fname CHAR(1);

10.    -> DECLARE name1 CHAR(1);

11.    -> DECLARE name2 CHAR(1);

12.    -> DECLARE fullname VARCHAR(3);

13.    -> DECLARE pre_fullname VARCHAR(3) DEFAULT \'\';

14.    -> DECLARE age INT;

15.    -> DECLARE i INT DEFAULT 1;

16.    -> WHILE i <=num DO

17.    -> SET fname = SUBSTRING(\'赵钱孙李周吴郑王\',FLOOR(1+8*RAND()),1);

18.    -> SET name1 = SUBSTRING(\'一二三四五六七八九十甲乙丙丁\',ROUND(1+14*RAND()),1);

19.    -> SET name2 = SUBSTRING(\'一二三四五六七八九十甲乙丙丁\',ROUND(1+14*RAND()),1);

20.    ->

21.    -> IF ROUND(RAND())=0 THEN

22.    -> SET fullname = CONCAT(fname,name1);

23.    -> END IF;

24.    -> IF ROUND(RAND())=1 THEN

25.    -> SET fullname = CONCAT(fname,name1,name2);

26.    -> END IF;

27.    ->

28.    -> SET age = FLOOR(20+31*RAND());

29.    -> /* 给临时变量赋值,看最新的一条记录的name值 */

30.    -> SELECT NAME INTO pre_fullname FROM user1 ORDER BY id DESC LIMIT 1;

31.    -> /* 开始判断,如果刚赋值的name跟上一次赋值的name值一样,就跳过,i保持不变,继续取值;否则i+1,继续循环取值*/

32.    -> IF fullname=pre_fullname AND i>1 THEN

33.    ->

34.Display all 799 possibilities? (y or n)

35.    -> SET i=i;

36.    -> ELSEIF fullname IS NULL THEN

37.    ->

38.Display all 799 possibilities? (y or n)

39.    -> SET i=i;

40.Display all 799 possibilities? (y or n)

41.    -> SET i=i;

42.    -> ELSE

43.    ->

44.Display all 799 possibilities? (y or n)

45.    -> INSERT INTO user1 VALUES(NULL,fullname,age);

46.    ->

47.Display all 799 possibilities? (y or n)

48.    -> SET i = i + 1;

49.    -> END IF ;

50.    -> END WHILE;

51.    -> END$$

52.Query OK, 0 rows affected (0.00 sec)

53.

54.mysql> DELIMITER ;

55.mysql>

56.mysql> truncate table user1;

57.Query OK, 0 rows affected (0.01 sec)

58.

59.mysql> select * from user1;

60.Empty set (0.00 sec)

61.

62.mysql> call pro3(100);

63.Query OK, 1 row affected (0.11 sec)

64.

65.mysql> select * from user1;

66.+-----+-----------+-----+

67.| id | name | age |

68.+-----+-----------+-----+

69.| 1 | 吴甲九 | 32 |

70.| 2 | 赵丙 | 49 |

71.| 3 | 钱二 | 40 |

72.| 4 | 郑二丙 | 34 |

73.| 5 | 孙四三 | 39 |

74.| 6 | 钱五十 | 39 |

75.| 7 | 赵五 | 23 |

76.| 8 | 郑九 | 22 |

77.| 9 | 钱九七 | 47 |

78.| 10 | 郑七乙 | 39 |

79.| 11 | 孙丙二 | 44 |

80.| 12 | 吴三九 | 30 |

81.| 13 | 钱九四 | 28 |

82.| 14 | 王十九 | 49 |

83.| 15 | 周丙乙 | 43 |

84.| 16 | 王十 | 33 |

85.| 17 | 钱乙七 | 36 |

86.| 18 | 赵七四 | 32 |

87.| 19 | 郑八二 | 31 |

88.| 20 | 赵二 | 35 |

89.| 21 | 赵丙 | 26 |

90.| 22 | 郑甲丁 | 38 |

91.| 23 | 周丙九 | 50 |

92.| 24 | 李丙五 | 27 |

93.| 25 | 李五三 | 37 |

94.| 26 | 孙丙六 | 46 |

95.| 27 | 钱八 | 37 |

96.| 28 | 周七六 | 40 |

97.| 29 | 李一一 | 45 |

98.| 30 | 钱十七 | 22 |

99.| 31 | 吴七一 | 49 |

100.| 32 | 吴丙六 | 39 |

101.| 33 | 吴四四 | 50 |

102.| 34 | 郑八丙 | 28 |

103.| 35 | 吴五七 | 26 |

104.| 36 | 吴甲 | 46 |

105.| 37 | 钱四 | 39 |

106.| 38 | 王丙九 | 24 |

107.| 39 | 王八八 | 38 |

108.| 40 | 吴乙丙 | 35 |

109.| 41 | 吴丙七 | 39 |

110.| 42 | 周甲丁 | 31 |

111.| 43 | 钱二甲 | 25 |

112.| 44 | 钱五丁 | 32 |

113.| 45 | 孙四二 | 28 |

114.| 46 | 李七丙 | 37 |

115.| 47 | 钱七七 | 46 |

116.| 48 | 郑乙四 | 33 |

117.| 49 | 钱甲丁 | 34 |

118.| 50 | 王五 | 37 |

119.| 51 | 吴一 | 44 |

120.| 52 | 王二十 | 33 |

121.| 53 | 郑四 | 41 |

122.| 54 | 钱九八 | 29 |

123.| 55 | 李十十 | 24 |

124.| 56 | 钱六七 | 44 |

125.| 57 | 王二 | 38 |

126.| 58 | 周五 | 36 |

127.| 59 | 吴九 | 44 |

128.| 60 | 赵丙 | 38 |

129.| 61 | 李五五 | 20 |

130.| 62 | 王八乙 | 33 |

131.| 63 | 王丙八 | 49 |

132.| 64 | 王九六 | 38 |

133.| 65 | 钱七 | 45 |

134.| 66 | 赵二二 | 36 |

135.| 67 | 钱五乙 | 40 |

136.| 68 | 孙甲七 | 43 |

137.| 69 | 郑甲五 | 47 |

138.| 70 | 赵丙 | 20 |

139.| 71 | 郑四 | 43 |

140.| 72 | 孙丙五 | 24 |

141.| 73 | 孙三 | 33 |

142.| 74 | 赵四乙 | 31 |

143.| 75 | 李 | 44 |

144.| 76 | 吴九丁 | 43 |

145.| 77 | 郑甲一 | 33 |

146.| 78 | 李三五 | 37 |

147.| 79 | 王二 | 31 |

148.| 80 | 赵七丙 | 35 |

149.| 81 | 吴三十 | 22 |

150.| 82 | 李二 | 50 |

151.| 83 | 李八 | 49 |

152.| 84 | 王一 | 27 |

153.| 85 | 王三 | 22 |

154.| 86 | 周五 | 45 |

155.| 87 | 郑八 | 44 |

156.| 88 | 郑甲二 | 48 |

157.| 89 | 赵乙 | 37 |

158.| 90 | 周四五 | 30 |

159.| 91 | 周二七 | 41 |

160.| 92 | 孙四 | 21 |

161.| 93 | 周丙七 | 24 |

162.| 94 | 孙丁乙 | 32 |

163.| 95 | 周九一 | 20 |

164.| 96 | 周九 | 32 |

165.| 97 | 赵二一 | 26 |

166.| 98 | 周丁五 | 47 |

167.| 99 | 孙三 | 38 |

168.| 100 | 吴十四 | 29 |

169.+-----+-----------+-----+

170.100 rows in set (0.00 sec)

171.

172.mysql>

从中看到已经连续100个随机数中,没有出现连续重复的姓名和年龄。

四,RAND()与RAND(N)区别

每个种子产生的随机数序列是不同的,如果传入N参数执行RAND(N),则每次查询到的随机数都是固定的,如果没有传入N参数,则每次都是随机的值。如下所示:

1.mysql> SELECT RAND(),RAND(5);

2.+--------------------+---------------------+

3.| RAND() | RAND(5) |

4.+--------------------+---------------------+

5.| 0.7946587333405938 | 0.40613597483014313 |

6.+--------------------+---------------------+

7.1 row in set (0.00 sec)

8.

9.

10.mysql> SELECT RAND(),RAND(5);

11.+---------------------+---------------------+

12.| RAND() | RAND(5) |

13.+---------------------+---------------------+

14.| 0.12910866749389904 | 0.40613597483014313 |

15.+---------------------+---------------------+

16.1 row in set (0.00 sec)

17.

18.

19.mysql> SELECT RAND(),RAND(5);

20.+-------------------+---------------------+

21.| RAND() | RAND(5) |

22.+-------------------+---------------------+

23.| 0.261567168181359 | 0.40613597483014313 |

24.+-------------------+---------------------+

25.1 row in set (0.00 sec)

26.

27.

28.mysql> SELECT RAND(),RAND(5);

29.+--------------------+---------------------+

30.| RAND() | RAND(5) |

31.+--------------------+---------------------+

32.| 0.9205098691587428 | 0.40613597483014313 |

33.+--------------------+---------------------+

34.1 row in set (0.00 sec)

35.

36.

37.mysql> SELECT RAND(),RAND(5);

38.+--------------------+---------------------+

39.| RAND() | RAND(5) |

40.+--------------------+---------------------+

41.| 0.8178478719832821 | 0.40613597483014313 |

42.+--------------------+---------------------+

43.1 row in set (0.00 sec)

44.

45.

46.mysql>

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值