Является ли mysql auto increment безопасным для использования в качестве userID?
Я работаю на веб-сайте, который позволяет людям создавать профили онлайн. Мне было интересно, если это правильный выбор для использования идентификаторов MySQL AUTO_INCREMENT
ed в качестве идентификаторов пользователя. Также, имея в виду, что мне может понадобиться дублировать базу данных на нескольких серверах в один прекрасный день?
например. вы бы использовали этот метод для userIds на веб-сайте, таком как Twitter или Facebook?
Я пробовал генерировать userIds с PHP раньше. Я использовал что-то вроде этого:
function generateID() {
$possible = "1234567890";
$code = "";
$characters = mt_rand(7,14);
$i = 0;
while ($i < $characters) {
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
return $code;
}
Это дало тип значений, которые мне нужны, но мне всегда приходилось проверять из БД, если этот идентификатор еще не существует.
Нет ли лучшего подхода?
Ответы
Ответ 1
Является ли mysql auto increment безопасным для использования в качестве идентификатора пользователя?
Если ваша система безопасности надежна, в принципе, да. Но в целом веб-разработчики испытывают дискомфорт, выставляя идентификаторы, которые позволяют угадывать другие идентификаторы, просто увеличивая или уменьшая число. Многие прибегают к случайным, многозначным идентификаторам.
В более неясной ноте числовые идентификаторы также могут позволить конкурентам оценить ваш рост, отслеживая, как увеличивается инкрементное значение.
Ответ 2
Нет, это не очень хорошая идея, потому что идентификаторы auto_increment не являются переносимыми. Для ваших идентификаторов пользователей вы хотите, чтобы идентификаторы, которые могут быть скопированы, восстановлены, перемещены между экземплярами базы данных и т.д., Не беспокоясь о столкновении идентификаторов.
Было бы лучше создать уникальный номер или буквенно-цифровую строку, используя что-то вроде UUID.
Ответ 3
Учитывая, что вы планируете заранее и потенциально будете распространять данные по базам данных, вам лучше подумать об использовании функции UUID() для получения уникальных идентификаторов. Это упрощает слияние данных в будущем.
Ответ 4
лично, да, я так думаю, до момента.
При дублировании таблицы базы данных с полем автоматического увеличения, я думаю, что поле сохраняет максимальное значение (в зависимости от того, как вы его дублируете, сценарий, который я имею в виду, это mysqldump с данными), поэтому, когда вы добавляете новую строку, она будет назначена следующий идентификатор.
Однако, если вы должны были запускать это сразу в нескольких базах данных, и они не были реплицированы, вам понадобится другой способ генерации идентификаторов, чтобы избежать получения строк с одинаковым идентификатором (хотя я не могу придумать сценарий, где вы это сделаете).
Я не мог сказать, лучше ли это или нет, но это, безусловно, работает.
Ответ 5
Да Если вы удалите строку с идентификатором 7, следующее значение автоматического приращения будет равно 8, а не 7. Таким образом, все значения, безусловно, будут уникальными. и вам нужно будет усечь таблицу, чтобы снова запустить автоинкремент. SO, вы всегда можете использовать поля автоматического прироста для пользовательских IDS.