三,执行改动后的存储过程,查看效果
执行结果如下:
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>