Tạo số ngẫu nhiên 4 chữ số trong MySQL
Sử dụng hàm RAND() kết hợp với FLOOR() để sinh số ngẫu nhiên trong khoảng 0-9999 (4 chữ số).
Công thức
FLOOR(RAND() * 10000)
Giải thích: RAND() sinh số thực [0, 1), nhân 10000 cho khoảng [0, 10000), FLOOR() lấy phần nguyên.
Ví dụ minh họa
Tạo bảng DemoTable717:
mysql> CREATE TABLE DemoTable717 (
UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserPassword INT
);
Query OK, 0 rows affected (0.81 sec)
Chèn dữ liệu ban đầu:
mysql> INSERT INTO DemoTable717(UserPassword) VALUES(1454343); Query OK, 1 row affected (0.21 sec) mysql> INSERT INTO DemoTable717(UserPassword) VALUES(674654); Query OK, 1 row affected (0.13 sec) mysql> INSERT INTO DemoTable717(UserPassword) VALUES(989883); Query OK, 1 row affected (0.15 sec) mysql> INSERT INTO DemoTable717(UserPassword) VALUES(909983); Query OK, 1 row affected (0.15 sec)
Xem dữ liệu:
mysql> SELECT * FROM DemoTable717;
+--------+--------------+ | UserId | UserPassword | +--------+--------------+ | 1 | 1454343 | | 2 | 674654 | | 3 | 989883 | | 4 | 909983 | +--------+--------------+ 4 rows in set (0.00 sec)
Cập nhật cột UserPassword thành số ngẫu nhiên 4 chữ số:
mysql> UPDATE DemoTable717 SET UserPassword = (SELECT FLOOR(RAND() * 10000)); Query OK, 4 rows affected (0.22 sec) Rows matched: 4 Changed: 4 Warnings: 0
Kiểm tra lại (mỗi lần chạy sẽ ra kết quả khác nhau):
mysql> SELECT * FROM DemoTable717;
+--------+--------------+ | UserId | UserPassword | +--------+--------------+ | 1 | 4319 | | 2 | 3902 | | 3 | 6553 | | 4 | 1060 | +--------+--------------+ 4 rows in set (0.00 sec)
Các biến thể
| Yêu cầu | Công thức | Khoảng giá trị |
|---|---|---|
| 4 chữ số (0000-9999) | FLOOR(RAND() * 10000) | 0 - 9999 |
| 4 chữ số (1000-9999) | FLOOR(1000 + RAND() * 9000) | 1000 - 9999 |
| 6 chữ số (OTP) | FLOOR(RAND() * 1000000) | 0 - 999999 |
| Số ngẫu nhiên trong khoảng [a, b] | FLOOR(a + RAND() * (b - a + 1)) | a - b |
Lưu ý
RAND()được gọi riêng cho mỗi hàng khi dùng trong UPDATE- Để cố định seed (dùng cho test):
RAND(seed_value) - MySQL 8.0+: có thể dùng
RANDOM_BYTES()cho mục đích bảo mật