Генерация случайных чисел в MySQL: выражение RAND()

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы сгенерировать случайное целое число в диапазоне от 1 до 100 в MySQL, используйте следующий запрос:

SQL
Скопировать код
SELECT FLOOR(1 + RAND() * 100) AS СлучайноеЦелоеЧисло;

Функция RAND() генерирует случайное число: FLOOR() преобразовывает его в целое. Каждый раз при выполнении запроса выводится новое число!

Кинга Идем в IT: пошаговый план для смены профессии

Регулировка диапазона

Для генерации случайного целого числа в определенном диапазоне от min до max, используйте формулу:

SQL
Скопировать код
SELECT FLOOR(RAND() * (max – min + 1)) + min;

Заметьте: данный метод не отсеивает повторяющиеся числа. Для исключения повторов можно вести учет уже полученных чисел через временные таблицы.

Сохранение целостности базы данных

Если нет необходимости в сохранении сгенерированных значений, то лучше не писать их в базу данных. Генерируйте их непосредственно в запросе SELECT. Это обеспечит оптимальное функционирование базы данных.

Визуализация

Принцип генерации случайного числа в MySQL можно сравнить с извлечением лотерейного билета из барабана:

SQL
Скопировать код
SELECT FLOOR(RAND() * N) + A;

Случайным образом:

Markdown
Скопировать код
Было: [🔢🔢🔢⚫🔢🔢🔢]
Стало: [⚫] – Вот она, случайность в действии!

Используя выражение FLOOR(RAND() * N) + A, вы получаете случайное число в заданном диапазоне от A до N.

Пользовательский генератор случайных чисел

Для работы со сложными диапазонами или для повторного применения логики по генерации случайных чисел определите функцию:

SQL
Скопировать код
CREATE FUNCTION GetRandomNumber(min INT, max INT) 
RETURNS INT DETERMINISTIC
BEGIN
  RETURN FLOOR(RAND() * (max – min + 1)) + min;
END;

Чтобы сгенерировать число в нужном диапазоне, вызовите данную функцию:

SQL
Скопировать код
SELECT GetRandomNumber(100, 500) as СлучайноеЧисло;

Генерация случайных чисел без повторений

Чтобы избежать повтора чисел, используйте временные таблицы и проверяйте выбранные случайные числа на уникальность:

SQL
Скопировать код
CREATE TEMPORARY TABLE UsedNumbers (number INT);
SELECT FLOOR(RAND() * (max – min + 1)) + min AS УникальноеСлучайноеЧисло
WHERE УникальноеСлучайноеЧисло NOT IN (SELECT number FROM UsedNumbers);

Перформансный подход

При работе с большими датасетами и необходимости высокой производительности следует быть осторожными с использованием RAND() вместе с ORDER BY, так как взаимодействие данных функций может снизить производительность. Будьте готовы рассматривать альтернативные методы выбора случайных записей.

Полезные материалы

  1. MySQL :: Справочник по MySQL 8.0 :: 14.6.2 Математические функции — Официальная документация MySQL с описанием функции RAND().
  2. StackOverflow: mysql – Как узнать текущее значение AUTO_INCREMENT для любой таблицы — Обсуждение на форуме StackOverflow со множеством полезной информации о генерации случайных чисел в SQL.
  3. Vertabelo Database Modeler — Практические рекомендации по работе c случайной выборкой данных, советы по оптимизации производительности и многое другое по работе с MySQL.