Имеется таблица, в которой необходимо создать UUID бинарного формата (binary(16)) для старых записей, которым он не задан. Выполняю запрос:
UPDATE `table` SET uuid=UNHEX(REPLACE(UUID(), '-', '')) WHERE uuid IS NULL;
И после обновления лишь одной записи получаю подобные ошибки:
Дублирующаяся запись '\x8B';\xA6T\xAE\x11\xE7\x9B\x0F\xF0yYry\xD5' по ключу 'uuid'
Подобное поведение наблюдается только при наличии REPLACE в запросе. Товарищи специалисты, подскажите решение этой проблемы, пожалуйста.
Что делаете вы:
uuid
Если представить что ваш UUID, как среднее случайно число, равен четырём, то вы пытаетесь сделать примерно следующее:
UPDATE `table` SET uuid=4 WHERE uuid IS NULL;
Естественно возникает ошибка.
У этой проблемы есть правильные решения, и есть быстрые.
Если быстро, то можно выдумать свой собственный UUID, который вычисляется как функция от уникальной части строки в БД. Например, от её ID:
UPDATE `table` SET
`uuid` = UNHEX(MD5(CONCAT(UUID(), `id`)))
WHERE `uuid` IS NULL;
Так, каждая запись будет обновляться своим собственным, в какой-то мере случайным, UUID.
Если нужно решить правильно, то, надеюсь, местные эксперты по хранимым процедурам наведут на правильное направление в другом ответе.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Но вот только с одним условием если ячейка в которую копируют равна nullИ так есть таблица goods в кторой есть столбцы create_at и update_at
Чисто для вашего понимания напишу рандомные таблицы:
Не хочу сделать на сайте для пользователей файловую систему папка+файл например пользователь создал папку "home" в ней папка "user" и так далее...