#mysql
#mysql
Вопрос:
Я хочу создать пользователя в User table. Это мой процесс.
- продолжить, когда адрес электронной почты и псевдоним отсутствуют
- создает пользователя
Я думаю, что если бы я не заблокировал таблицу User при создании пользователя, то адрес электронной почты и псевдоним могли бы быть продублированы.
Есть идеи?
Ответ №1:
Избегайте блокировок, где это возможно. Вместо этого используйте уникальный индекс и просто вставьте пользователя. Если пользователь или электронная почта существуют, ваш запрос вернет ошибку, подобную:
Код ошибки: 1062. Дублирующая запись ‘john.doe@example.org ‘ для ключа ‘unique_email’
Это должно быть сделано с 2 отдельными индексами. Один для электронной почты и один для пользователей. Это имеет следующие преимущества и почти нулевые недостатки:
- Это обеспечивает согласованность базы данных. Ни в коем случае у двух пользователей не будет ни одного адреса электронной почты, ни одного имени пользователя.
- Это позволяет избежать ненужных блокировок.
- Это позволяет избежать технической задолженности. Допустим, в дальнейшем вы добавляете пользователя-импортера. В импортере вы не можете проверить наличие дубликатов учетных записей, или добавить блокировки, или забыть проверить, существует ли имя пользователя или адрес электронной почты. Ваш импортер заработает, и ваша база данных теперь будет содержать записи, которые дублируют друг друга.
Ответ №2:
Я бы попытался создать комбинированный уникальный ключ для электронной почты и псевдонима
CREATE UNIQUE INDEX some_index_name ON user_table(email , nickname)
Редактировать: чтобы учесть комментарии ниже, мы также должны создать еще 2 уникальных индекса для электронной почты и имени пользователя, чтобы убедиться, что 2 пользователя с разными электронными письмами могут использовать одно и то же имя пользователя и наоборот.
Комментарии:
1. Я бы не стал этого делать. Вам нужно создать два отдельных индекса , так как в этом случае пользователи смогут использовать один и тот же адрес электронной почты john.doe@example.org или 2 пользователя с разными электронными письмами могут использовать одно и то же имя пользователя.
2. да, необходимы дополнительные 2 индекса, если мы хотим также проверить уникальный адрес электронной почты и имя пользователя