คำสั่งหลัก
ใช้ RAND() สร้างสุ่ม + FLOOR() ปัดลง + คณิตศาสตร์พื้นฐาน
สูตรสุ่มระหว่าง min-max
FLOOR(RAND() * (max - min + 1)) + min
สำหรับ 30-300: FLOOR(RAND() * 271) + 30 (เพราะ 300-30+1 = 271)
ตัวอย่างครบถ้วน
1. สร้างตาราง
mysql> create table RandomNumberDemo
-> (
-> MyNumber int
-> );
Query OK, 0 rows affected (0.54 sec)
2. เพิ่มข้อมูล
mysql> insert into RandomNumberDemo values(17); Query OK, 1 row affected (0.20 sec) mysql> insert into RandomNumberDemo values(18); Query OK, 1 row affected (0.12 sec) mysql> insert into RandomNumberDemo values(29); Query OK, 1 row affected (0.49 sec)
3. ดูข้อมูลก่อน
mysql> select * from RandomNumberDemo;
+----------+ | MyNumber | +----------+ | 17 | | 18 | | 29 | +----------+
4. เพิ่มสุ่ม 30-300 ให้แถวที่ MyNumber = 18
mysql> update RandomNumberDemo
-> set MyNumber = MyNumber + FLOOR(RAND() * 271) + 30
-> where MyNumber = 18;
Query OK, 1 row affected (0.20 sec) Rows matched: 1 Changed: 1 Warnings: 0
5. ตรวจสอบ (18 + random 30-300 = 158 ในตัวอย่าง)
mysql> select * from RandomNumberDemo;
+----------+ | MyNumber | +----------+ | 17 | | 158 | | 29 | +----------+
ขยาย: อัปเดตทุกแถวสุ่มคนละค่า
UPDATE RandomNumberDemo SET MyNumber = MyNumber + FLOOR(RAND() * 271) + 30;
แต่ละแถวจะได้ค่าสุ่มต่างกัน (RAND() เรียกใหม่ต่อแถว)
MySQL 8.0: ใช้ RANDOM_BYTES() สำหรับ cryptographic random
UPDATE t SET val = val + (ASCII(SUBSTRING(RANDOM_BYTES(1),1,1)) % 271) + 30;
ตั้ง Seed ให้ reproducible (testing)
SET SESSION rand_seed1 = 12345, rand_seed2 = 67890; -- RAND() จะคืนค่า sequence เดียวกันทุกครั้ง
กรณีใช้งานจริง
- Load testing: สร้างข้อมูลจำลอง
- Game: random damage/loot
- Sampling: random offset
- Obfuscation: เพิ่ม noise ให้ข้อมูล nhạy cảm
หมายเหตุ: RAND() ใช้ Mersenne Twister PRNG ไม่เหมาะสำหรับ cryptographic purposes