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

Tạo 5 số ngẫu nhiên trong MySQL Stored Procedure

Phương pháp

Sử dụng ORDER BY RAND() kết hợp LIMIT để lấy mẫu ngẫu nhiên, sau đó gom nhóm bằng GROUP_CONCAT.

Ví dụ hoàn chỉnh

Tạo bảng và chèn dữ liệu:

CREATE TABLE DemoTable (Value INT);
INSERT INTO DemoTable VALUES
(89), (98), (10), (78), (75), (76), (74), (99), (101);

Tạo Stored Procedure:

DELIMITER //
CREATE PROCEDURE generate_Random5Numbers()
BEGIN
    SELECT GROUP_CONCAT(Value SEPARATOR '/')
    FROM (
        SELECT Value
        FROM (
            SELECT Value
            FROM DemoTable
            WHERE Value BETWEEN 10 AND 100
            ORDER BY RAND()
            LIMIT 5
        ) AS Ascending_Order
        ORDER BY Value
    ) AS FiveValues;
END //
DELIMITER ;

Gọi procedure:

CALL generate_Random5Numbers();

Kết quả mẫu:

+-----------------------------------+
| GROUP_CONCAT(Value SEPARATOR '/') |
+-----------------------------------+
| 89/74/78/99/10                    |
+-----------------------------------+

Giải thích các bước

  1. Lọc phạm vi: WHERE Value BETWEEN 10 AND 100 chỉ lấy giá trị trong khoảng.
  2. Ngẫu nhiên hóa: ORDER BY RAND() sắp xếp ngẫu nhiên.
  3. Giới hạn: LIMIT 5 lấy 5 bản ghi đầu tiên.
  4. Sắp xếp lại: Subquery ngoài sắp xếp theo giá trị tăng dần.
  5. Gom chuỗi: GROUP_CONCAT(... SEPARATOR '/') nối thành chuỗi.

Lưu ý hiệu năng

  • ORDER BY RAND() chậm trên bảng lớn (full table scan + filesort).
  • Với bảng lớn, hãy dùng kỹ thuật WHERE RAND() < (SELECT (5/COUNT(*)) FROM DemoTable) hoặc lấy ID ngẫu nhiên từ ứng dụng.
  • GROUP_CONCAT có giới hạn độ dài mặc định 1024 bytes (cấu hình group_concat_max_len).