MySQL UUID () когда не уникален? - PullRequest
2 голосов
/ 13 марта 2012

Что происходит, когда UUID(), сгенерированный MySQL, не является уникальным? Если это для столбца, который является первичным ключом, MySQL выдает ошибку или пытается генерировать другой UUID, пока не будет найден действительно уникальный?

Ответы [ 2 ]

5 голосов
/ 13 марта 2012

Что ж, если вы дважды наберете UUID() и получите те же результаты, самым проблематичным будет то, что "материал сломан" (тм). Он должен быть уникальным и должен быть всегда, насколько я знаю.

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

от http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_uuid

UUID представляет собой число, уникальное в глобальном масштабе и время. Ожидается, что два вызова UUID () сгенерируют два разных значения, даже если эти вызовы выполняются на двух отдельных компьютерах которые не связаны друг с другом.

Может быть, вы имеете в виду что-то еще? Например, если вы используете UUID() для генерации чего-то, что должно быть уникальным (например, первичный ключ или уникальное поле и т. Д.), И вы ранее добавили тот же номер (как, например, один раз вы вызывали UUID(), но вставили что-то дважды), тогда вы просто получите ошибку по умолчанию, которую получаете при добавлении неуникального контента в место, которое должно быть уникальным. Вы не получите новый.

некоторые материалы для чтения об уникальности:

  1. руководство. Прочитайте его, и как он использует различные части для генерации uuid .: http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_uuid

  2. Проверьте ссылку в этом руководстве на фактическое определение (но это довольно читаемо, так что вы можете пропустить это): https://www2.opengroup.org/ogsys/jsp/publications/PublicationDetails.jsp?catalogno=c706

  3. Некоторые более простые для понимания метрики вероятности дубликатов здесь: http://en.wikipedia.org/wiki/Universally_unique_identifier

  4. на сайте mysql (форумах и т. Д.) Тоже есть разговоры об использовании его в качестве первичного ключа, но, поскольку я на работе и у меня мало времени, вам нужно искать это самостоятельно:)

3 голосов
/ 28 июня 2013

MySQL UUID () детерминирован на основе MAC-адреса, версии и отметки времени. Если 2 потока на одном сервере вызывают одну и ту же метку времени (точно такие же микросекунды), ожидаются эквивалентные результаты. Это невозможно с одним потоком, поскольку вызовы будут разделяться несколькими микросекундами на процессорах 4 ГГц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...