czwartek, 19 stycznia 2012

Generator liczb (pseudo)losowych w MySQL

Potrzeba takiego generatora zrodziła podczas produkcji bazy do hurtowni danych. Nie będę ukrywał, że MySQL jest naprawdę kiepskim generatorem takowych liczb, jednak czasem funkcja ta bywa potrzebna np. przy zasilaniu bazy danymi testowymi.
Wystarczy załadować słowniki, i złączyć je po warunku 1 = 1 (iloczyn kartezjański), a następnie posortować po RAND()... a co jeśli potrzebna jest kolumna z liczbami albo wiele takich kolumn? Czy warto tworzyć słownik liczb do tego celu?
Jak pokażę na poniższym przykładzie nie jest to potrzebne. Potrzebna będzie tabela z wektorem inicjującym z dużą liczbą wierszy, jednak gdybyśmy takowej nie posiadali to MySQL po instalacji przychodzi z kilkoma tabelami systemowymi, które można wykorzystać do tego celu. W trakcie moich testów okazuje się, że każdy użytkownik bazy może je sobie przeglądać. SELECT
  RAND() liczba_losowa_zmiennoprzecinkowa,
  CAST( RAND()*10000 AS UNSIGNED ) liczba_losowa_calakowita
FROM
  information_schema.columns
  inner join information_schema.columns inf ON 1 = 1
Wynikiem powyższego zapytania, będą 2 kolumny z liczbami pseudolosowymi:


Brak komentarzy: