Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เพิ่มสุ่มตัวเลข 30-300 เข้าไปในคอลัมน์ที่มีอยู่ใน MySQL


คำสั่งหลัก

ใช้ 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