Я только что импортировал кучу данных в таблицу MySQL, и у меня есть столбец «GUID», который я хочу в основном заполнить всеми существующими строками новыми уникальными случайными GUID.
Как мне это сделать в MySQL?
Я попытался
UPDATE db.tablename
SET columnID = UUID()
where columnID is not null
И просто сделайте все поля одинаковыми
Ответы:
Не уверен, что это самый простой способ, но он работает. Идея состоит в том, чтобы создать триггер, который будет работать за вас, затем выполнить запрос, который обновляет вашу таблицу, и, наконец, сбросить этот триггер:
Затем выполните
И
DROP TRIGGER beforeYourTableUpdate
;ОБНОВЛЕНИЕ Другое решение, которое не использует триггеры, но требует первичного ключа или уникального индекса:
ОБНОВЛЕНИЕ еще раз: похоже, что ваш исходный запрос также должен работать (возможно, вам не нужно
WHERE columnID is not null
, поэтому весь мой модный код не нужен.источник
UUID
он реализован правильно (а я считаю, что это так), вы сможете создать уникальный индекс без проверки дубликатов.Мне нужно было добавить столбец первичного ключа guid в существующую таблицу и заполнить его уникальными идентификаторами GUID, и этот запрос на обновление с внутренним выбором сработал для меня:
Так просто :-)
источник
UUID
создается на основе машины и отметки времени . Поскольку для выполнения запроса требуются миллисекунды, они должны быть действительно очень близки ... но никогда не должны быть одинаковыми ... хорошо вас заверить, это добавитьUNIQUE
индекс в этот столбец.UPDATE sri_issued_quiz SET quiz_id=uuid();
Утвержденное решение действительно создает уникальные идентификаторы, но на первый взгляд они выглядят одинаково, отличаются только первые несколько символов.
Если вам нужны явно разные ключи, попробуйте следующее:
Я использую версию сервера MySQL: 5.5.40-0 + wheezy1 (Debian)
источник
SELECT INSERT(INSERT(INSERT(INSERT(MD5(UUID()), 9, 0, '-'), 14, 0, '-'), 19, 0, '-'), 24, 0, '-')
запрос не очень красивый, но он выполняет свою работу.источник
Просто небольшое дополнение, которое нужно сделать, поскольку я получил странный результат при попытке изменить UUID по мере их создания. Я нашел ответ на Ракеше , чтобы быть самым простым , что работает хорошо, за исключением тех случаев , когда вы хотите лишить тир.
Для справки:
Это отлично работало само по себе. Но когда я попробовал это:
Тогда все результирующие значения были одинаковыми (незначительно разными - я в четыре раза проверял с помощью
GROUP BY some_field
запроса). Каким бы ни было расположение скобок, происходит то же самое.Кажется, что при окружении подзапроса для генерации UUID с REPLACE он запускает запрос UUID только один раз, что, вероятно, имеет смысл в качестве оптимизации для гораздо более умных разработчиков, чем я, но для меня это не так.
Чтобы решить эту проблему, я просто разделил его на два запроса:
Простое решение, очевидно, но, надеюсь, это сэкономит кому-то время, которое я только что потерял.
источник
Похоже на простую опечатку. Разве вы не имели в виду "... где columnId равен нулю"?
источник
WHERE
. И генерируемые значения очень похожи, поэтому необходимо внимательно посмотреть на них, чтобы убедиться, что они действительно разные.Я столкнулся в основном с той же проблемой. В моем случае uuid хранится как BINARY (16) и имеет ограничения NOT NULL UNIQUE. И я столкнулся с проблемой, когда один и тот же UUID был сгенерирован для каждой строки, а ограничение UNIQUE не позволяет этого. Итак, этот запрос не работает:
UNHEX(REPLACE(uuid(), '-', ''))
Но для меня это сработало, когда я использовал такой запрос с вложенным внутренним выбором:
UNHEX(REPLACE((SELECT uuid()), '-', ''))
Затем выдается уникальный результат для каждой записи.
источник
источник
MYsql UPDATE имя таблицы SET columnName = UUID ()
oracle UPDATE имя таблицы SET columnName = SYS_GUID ();
SQLSERVER UPDATE имя таблицы SET columnName = NEWID () ;;
источник
источник