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

สร้างเลขสุ่ม 4 หลักใน MySQL ด้วย RAND() และ FLOOR()

การสร้างตัวเลขสุ่ม 4 หลัก (1000-9999) ใน MySQL

ใช้ฟังก์ชัน RAND() สร้างเลขสุ่ม 0-1 คูณ 10000 แล้วใช้ FLOOR() ปัดทิ้งทศนิยม จะได้เลข 0-9999 หากต้องการ 1000-9999 ให้บวก 1000

สูตรพื้นฐาน

FLOOR(RAND() * 10000)        -- 0 ถึง 9999
FLOOR(1000 + RAND() * 9000)  -- 1000 ถึง 9999 (4 หลักแน่นอน)

ตัวอย่าง: อัปเดตรหัสผ่านให้เป็นเลขสุ่ม 4 หลัก

สร้างตารางผู้ใช้:

mysql> CREATE TABLE DemoTable717 (
    UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    UserPassword INT
);
Query OK, 0 rows affected (0.81 sec)

mysql> INSERT INTO DemoTable717 (UserPassword) VALUES 
    (1454343), (674654), (989883), (909983);
Query OK, 4 rows affected

อัปเดตคอลัมน์ UserPassword ให้เป็นเลขสุ่ม 4 หลัก (0-9999):

mysql> UPDATE DemoTable717 
SET UserPassword = (SELECT FLOOR(RAND() * 10000));
Query OK, 4 rows affected (0.22 sec)

ตรวจสอบผลลัพธ์ (จะได้เลขสุ่มต่างกันทุกแถว):

mysql> SELECT * FROM DemoTable717;
+--------+--------------+
| UserId | UserPassword |
+--------+--------------+
| 1      | 4319         |
| 2      | 3902         |
| 3      | 6553         |
| 4      | 1060         |
+--------+--------------+
4 rows in set (0.00 sec)

หมายเหตุสำคัญ

  • RAND() จะสุ่มค่าใหม่ **ทุกแถว** เมื่อใช้ใน UPDATE/SELECT
  • หากต้องการค่าเดียวกันทุกแถว ให้กำหนดใน Variable ก่อน: SET @r = FLOOR(RAND()*10000); UPDATE ... SET col = @r;
  • สำหรับรหัสผ่านจริง ควรใช้ฟังก์ชัน Hash (SHA2, BCRYPT) ไม่ใช่เก็บเลขสุ่ม
  • RAND(seed) ใส่ Seed เพื่อให้ผลลัพธ์ซ้ำได้ (สำหรับ Testing)

การสร้างเลขสุ่มแบบอื่นๆ

  • เลข 6 หลัก: FLOOR(100000 + RAND() * 900000)
  • สุ่มจากช่วงที่กำหนด: FLOOR(min + RAND() * (max - min + 1))
  • สุ่มข้อความ: ใช้ UUID(), MD5(RAND()), หรือ SUBSTRING('abcdef...', FLOOR(RAND()*len)+1, 1)