У меня есть база данных, содержащая много строк, я хочу обновить столбец в каждой строке с помощью случайной строки из 4 символов 0-9a-zA-Z
, но после того, как убедиться, что эта случайная строка еще не существует.
Важная часть того, что все столбцы должны быть обновлены с помощью уникальной строки, я не знаю, как это можно сделать. Возможно, путем воссоздания новой случайной строки, когда уже существует случайная строка.
Так что в конце Если база данных содержит 500 000 строк, например, все 500 000 строк обновляются с уникальным случайным значением.
Таблица называется messages
а столбец называется messageid
.
Как это сделать?
Во-первых, почему строка? Почему бы просто не использовать целое число для идентификатора сообщения? Это было бы легко реализовать:
set @m := 0;
update messages
set message_id = (@m := @m + 1)
order by rand();
Вы можете сделать что-то подобное со строкой, но это более громоздко, и использование числа делает это гораздо менее болезненным.
Из вопроса, похоже, вы хотите создать случайную строку.
В основном для этого вам нужно играть с функцией rand().
Вы можете использовать это для достижения случайной строки.
select conv(floor(rand() * 9999), 20, 36) ;
select SUBSTRING(MD5(RAND()) FROM 1 FOR 4);
Чтобы применить к вашей таблице,
update messages
set message_id = (select conv(floor(rand() * 9999), 20, 36));
or
update messages
set message_id = (select SUBSTRING(MD5(RAND()) FROM 1 FOR 4));
SQL_SAFE_UPDATES
потому что в этом запросе не используется предложение WHERE.