RAND() în MySQL

Funcții matematice MySQL 5.0+

Un număr aleatoriu între 0 (inclusiv) și 1 (exclusiv); cu seed, șirul se repetă.

Sintaxă
RAND([seed])

Ce face RAND()

RAND() returnează un număr real aleatoriu. Pentru un întreg între a și b: FLOOR(a + RAND() * (b - a + 1)). Cu un argument (seed), funcția dă mereu același șir de valori, util la teste.

RAND() nu este potrivit pentru securitate (parole, token-uri); pentru asta există RANDOM_BYTES().

Parametri

Parametru Descriere
seed Opțional. Valoare de pornire pentru un șir reproductibil.

Ce returnează

Un număr real între 0 și 1.

Exemple

Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.

CREATE TABLE produse (
  id INT PRIMARY KEY,
  nume VARCHAR(30),
  pret DECIMAL(10,2),
  stoc INT,
  reducere INT
);

INSERT INTO produse VALUES
  (1, 'Laptop', 3499.90, 4, NULL),
  (2, 'Mouse', 79.50, 25, 10),
  (3, 'Birou', 899.00, 0, 15),
  (4, 'Scaun', 649.99, 7, NULL),
  (5, 'Monitor', 1199.00, 3, 5);

Exemplul 1: Același seed, același rezultat

SELECT ROUND(RAND(42), 4) AS cu_seed, FLOOR(1 + RAND(7) * 6) AS zar_reproductibil;

Rezultat

+---------+-------------------+
| cu_seed | zar_reproductibil |
+---------+-------------------+
|  0.6629 |                 6 |
+---------+-------------------+

Exemplul 2: Un produs ales la întâmplare

SELECT nume FROM produse ORDER BY RAND() LIMIT 1;

Rezultat în MySQL (diferă la fiecare rulare)

+---------+
| nume    |
+---------+
| Monitor |
+---------+

Greșeli frecvente

  • Folosești ORDER BY RAND() pe tabele mari. MySQL trebuie să genereze un număr pentru fiecare rând și să sorteze tot tabelul, ceea ce e foarte lent.

Comenzi înrudite

  • RANDOM_BYTES(): Returnează un șir de octeți aleatorii, sigur pentru criptografie (chei, token-uri, vectori AES).
  • FLOOR(): Rotunjește în jos, la cel mai mare număr întreg mai mic sau egal.
  • UUID(): Generează un identificator unic universal (UUID versiunea 1), un text de 36 de caractere.