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.