Неуязвимые целочисленные первичные ключи для MySQL - PullRequest
2 голосов
/ 20 октября 2011

Я работаю над базой данных, которая использует целые числа в качестве первичных ключей для ряда таблиц. Я хотел бы сделать первичные ключи относительно сложными для угадывания - они не должны быть сверхжесткими, просто не увеличивая целые числа в младших сотнях. Поскольку я модифицирую это в существующие схемы с существующими данными, изменение типа данных первичного ключа (integer) не представляется возможным. Что мне интересно, так это то, как лучше всего генерировать идентификаторы. Пока я могу думать об этих вариантах:

  1. Создание UUID с использованием UUID() и преобразование их в целое число.
  2. Держите отдельную таблицу, заполненную случайными целыми числами, и используйте процедуру, чтобы выбрать и удалить одну из таблиц внутри транзакции.
  3. Используйте метку времени UNIX плюс случайное n-значное число, например, CONCAT(UNIX_TIMESTAMP(),SUBSTRING(RAND() FROM 3 FOR 6))

Я тоже открыт для других предложений.

Буду признателен за любые мысли, которые вы можете предложить.

Спасибо, Росс

1 Ответ

4 голосов
/ 20 октября 2011

Почему ты это делаешь? Вы испортите способ физического хранения данных. Используйте вторичный индекс и сделайте его GUID, если вам нужно передать его через URL для поиска.

...