Алгоритм для изменения большого кол-ва строк в БД

Есть таблица в БД, грубо говоря:
id | num

Поле id представляет из себя целые числа, от 1 до 100 000. Некоторые значения могут отсутствовать (к примеру: ..., 97, 98, 99, 100, 112, 113, ...).

Необходимо заполнить num случайными целыми числами.

Вариант решения №1:
1. Достать из таблицы все значения;
2. Сделать цикл, в каждом проходе которого делать запрос update table set num=rand(0,999999) where id=$id

Возможно есть более умный способ, чтобы не делать 100 000 запросов на обновление?
  • Вопрос задан
  • 2486 просмотров
Решения вопроса 1
@kirsan_vlz
mysql> select * from test;;
+----+------+
| id | num |
+----+------+
| 1 | NULL |
| 2 | NULL |
| 3 | NULL |
| 4 | NULL |
| 5 | NULL |
+----+------+
5 rows in set (0.00 sec)

mysql> update test set num = rand(12)*1000000;
Query OK, 5 rows affected (0.00 sec)
Rows matched: 5 Changed: 5 Warnings: 0

mysql> select * from test;
+----+--------+
| id | num |
+----+--------+
| 1 | 157418 |
| 2 | 629671 |
| 3 | 676102 |
| 4 | 491496 |
| 5 | 429176 |
+----+--------+
5 rows in set (0.00 sec)

Комментарии, я думаю, излишни )
Единственное — функции rand() параметром передаётся лишь стартовое значение рандомайзера, а не диапазон случайной величины. И возвращает функция значение от 0 о 1. Поэтому умножением приводите результат к нужному порядку.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы