Должен ли я блокировать таблицу при создании пользователя?

#mysql

#mysql

Вопрос:

Я хочу создать пользователя в User table. Это мой процесс.

  1. продолжить, когда адрес электронной почты и псевдоним отсутствуют
  2. создает пользователя

Я думаю, что если бы я не заблокировал таблицу User при создании пользователя, то адрес электронной почты и псевдоним могли бы быть продублированы.

Есть идеи?

Ответ №1:

Избегайте блокировок, где это возможно. Вместо этого используйте уникальный индекс и просто вставьте пользователя. Если пользователь или электронная почта существуют, ваш запрос вернет ошибку, подобную:

Код ошибки: 1062. Дублирующая запись ‘john.doe@example.org ‘ для ключа ‘unique_email’

Это должно быть сделано с 2 отдельными индексами. Один для электронной почты и один для пользователей. Это имеет следующие преимущества и почти нулевые недостатки:

  1. Это обеспечивает согласованность базы данных. Ни в коем случае у двух пользователей не будет ни одного адреса электронной почты, ни одного имени пользователя.
  2. Это позволяет избежать ненужных блокировок.
  3. Это позволяет избежать технической задолженности. Допустим, в дальнейшем вы добавляете пользователя-импортера. В импортере вы не можете проверить наличие дубликатов учетных записей, или добавить блокировки, или забыть проверить, существует ли имя пользователя или адрес электронной почты. Ваш импортер заработает, и ваша база данных теперь будет содержать записи, которые дублируют друг друга.

Ответ №2:

Я бы попытался создать комбинированный уникальный ключ для электронной почты и псевдонима

 CREATE UNIQUE INDEX some_index_name ON user_table(email , nickname)
  

Редактировать: чтобы учесть комментарии ниже, мы также должны создать еще 2 уникальных индекса для электронной почты и имени пользователя, чтобы убедиться, что 2 пользователя с разными электронными письмами могут использовать одно и то же имя пользователя и наоборот.

Комментарии:

1. Я бы не стал этого делать. Вам нужно создать два отдельных индекса , так как в этом случае пользователи смогут использовать один и тот же адрес электронной почты john.doe@example.org или 2 пользователя с разными электронными письмами могут использовать одно и то же имя пользователя.

2. да, необходимы дополнительные 2 индекса, если мы хотим также проверить уникальный адрес электронной почты и имя пользователя