0

如果我在网页上有登录表单并且提示我输入电子邮件作为用户名和密码,我该怎么办。如果我设计这样的网页,我应该将该电子邮件作为主键吗?因为我在用户注册期间没有给用户一个字段,所以他/她可以输入任何可以进一步选择为主键的整数 ID。我还有其他属于该用户的表,我需要加入以检索所有详细信息。在这种情况下,我如何管理主键。我不能让它自动生成,因为它也需要同时输入到其他表中,而自动 id 无法做到这一点。

需要帮忙?

4

6 回答 6

2

您仍然应该使用 anauto increment作为主键。(并在电子邮件地址列上设置唯一约束)。

当用户随后通过您的表单登录时,您应该获取相关行,并将其保存在会话期间(用户登录时)的某个位置:

SELECT * FROM users WHERE email='johndoe@example.com' AND PASSWORD=SHA1('secret');

这将为您提供您应该在应用程序的其他地方使用的数据

编辑

当您有 2 个表时,1 个与用户,1 个与他们的个人资料,您在这两者之间建立了一对一的关系。这意味着 2 个表中的一个应该与另一个有关系,在一对一的情况下,最好从另一个表中引用拥有表。由于用户拥有个人资料,这将归结为:

user (id, email, password);
profile(id, user_id, contact, address);

要同时选择两者,您可以使用共享密钥加入它们:

SELECT * FROM user JOIN profile ON user.id = profile.user_id;

尽管在这种情况下甚至可以重用 user_id,作为PRIMARY KEY配置文件表。(这对于一对一的关系本质上是正确的,但如果你选择重新设计你的结构,以后可能会给你带来麻烦......)

要了解更多信息FOREIGN KEYS,请参阅MySQL 文档

请注意,您不需要将外键指定为约束,您只需创建列,并以编程方式确保值正确且一致。但约束有多个优点:

  • 它将确保没有悬空的行(如果配置正确)
  • 它可以为您处理删除子行(ON DELETE CASCADE
  • 您不能将键插入到不存在的引用中
  • 一些 ORM 可以直接从模式中读取关系
于 2013-08-20T11:54:10.753 回答
1

您可以将整数设置id为主键。首先您必须更新用户表,然后对于插入记录,您可以获得id值,然后您可以在其他表中插入其他用户相关信息。Email将是唯一的,因此您必须在插入任何用户之前检查电子邮件地址是否存在。我想这会对你有所帮助。

于 2013-08-20T11:53:39.080 回答
1

请使用自动递增的整数列作为用户表的主键。使用该 ID 作为记录的引用。您可以验证电子邮件的唯一性。

于 2013-08-20T11:55:20.003 回答
0

id应该是主键并自动递增它。您不应该将电子邮件作为主键。注册前检查邮箱ID是否已经存在。如果存在限制注册和重定向,否则允许注册。

例如。注册表字段:id、name、email、password

用户个人资料信息字段:id、user_id、年龄……

询问

select * from reg_table a inner join profile_info b on a.id=b.user_id where a.id=1
于 2013-08-20T11:48:58.653 回答
0

您应该使用整数。因为这是您的用户参考,所以当邮件地址更改时,您必须更新所有参考表。

于 2013-08-20T11:50:20.227 回答
0

磁盘空间不再像以前那样珍贵,因此,另一个想法,一个有点争议的想法是使用 GUIDS 作为主键,因为它们允许轻松合并数据库而变得越来越流行。

于 2013-08-20T11:57:30.637 回答