Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

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

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

Чтобы сгенерировать случайное целое число в диапазоне от 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.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

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

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

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.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какое выражение используется для генерации случайного целого числа в диапазоне от 1 до 100 в MySQL?
1 / 5