Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Thêm số ngẫu nhiên trong khoảng 30-300 vào cột hiện tại trong MySQL

Sử dụng RAND() kết hợp FLOOR() để tạo số ngẫu nhiên trong khoảng, sau đó cộng vào cột hiện tại qua UPDATE.

Công thức số ngẫu nhiên trong khoảng [min, max]

FLOOR(RAND() * (max - min + 1)) + min

Với khoảng 30-300: FLOOR(RAND() * 271) + 30 (vì 300-30+1=271)

Ví dụ minh họa

Tạo bảng demo:

mysql> CREATE TABLE RandomNumberDemo (MyNumber INT);

Chèn dữ liệu:

mysql> INSERT INTO RandomNumberDemo VALUES (17), (18), (29);

Xem dữ liệu:

mysql> SELECT * FROM RandomNumberDemo;
+----------+
| MyNumber |
+----------+
| 17       |
| 18       |
| 29       |
+----------+

Cập nhật hàng MyNumber=18, cộng thêm số ngẫu nhiên 30-300:

mysql> UPDATE RandomNumberDemo 
    -> SET MyNumber = MyNumber + FLOOR(RAND() * 271) + 30 
    -> WHERE MyNumber = 18;
Query OK, 1 row affected (0.20 sec)

Kết quả (ví dụ: 18 + 140 = 158):

mysql> SELECT * FROM RandomNumberDemo;
+----------+
| MyNumber |
+----------+
| 17       |
| 158      |
| 29       |
+----------+

Các biến thể hữu ích

Mục đíchCông thức
Số thực ngẫu nhiên [0,1)RAND()
Số nguyên [0, N]FLOOR(RAND() * (N+1))
Số nguyên [A, B]FLOOR(RAND() * (B-A+1)) + A
Số thực [A, B]RAND() * (B-A) + A
Chọn ngẫu nhiên 1 hàngORDER BY RAND() LIMIT 1

⚠️ Lưu ý hiệu năng

  • ORDER BY RAND() rất chậm trên bảng lớn (filesort toàn bộ)
  • Cách tốt hơn cho bảng lớn: WHERE id >= (SELECT FLOOR(RAND() * (SELECT MAX(id) FROM table)))
  • RAND() được tính lại cho mỗi hàng trong UPDATE → mỗi hàng nhận giá trị ngẫu nhiên khác nhau

Seed cố định (reproducible)

SELECT RAND(12345); -- Luôn trả về cùng chuỗi với seed 12345