创建用户时应该锁定表吗?

时间:2019-03-04 06:29:59

标签: mysql

我想在User表中创建一个用户。 这些是我的过程。

  1. 当电子邮件和昵称不存在时继续
  2. 创建用户

我认为,如果在创建用户时未锁定User表,则可以复制电子邮件和昵称。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

尽可能避免锁定。而是使用unique index,只需插入用户即可。如果用户或电子邮件存在,则您的查询将返回类似于以下内容的错误:

  

错误代码:1062。键'unique_email'的条目'john.doe@example.org'重复

这应该使用 2个单独的索引来完成。一种用于电子邮件,另一种用于用户。它具有以下优点,而缺点几乎为零:

  1. 它可以增强数据库的一致性。 2个用户绝不会拥有相同的电子邮件地址,也不会拥有相同的用户名。
  2. 它避免了不必要的锁定。
  3. 它避免使用technical debt。假设您添加了一个用户导入器。在导入程序中,您无法检查重复的帐户,添加锁或忘记检查用户名或电子邮件是否存在。您的导入程序将正常运行,并且您的数据库现在将包含彼此重复的条目。

答案 1 :(得分:0)

我会尝试在电子邮件和昵称上创建一个组合的唯一密钥

CREATE UNIQUE INDEX some_index_name ON user_table(email , nickname)

编辑:要解决以下问题,我们还应该为电子邮件和用户名创建2个唯一索引,以确保2个使用不同电子邮件的用户可以共享相同的用户名,反之亦然。