如果我在网页上有登录表单,我该怎么办?它提示我输入一个电子邮件作为用户名&密码。如果我设计这样的网页,我应该将该电子邮件作为主键吗?因为我在用户注册期间没有给用户一个字段,所以他/她可以输入任何可以进一步选择作为主键的整数ID。我还有其他表属于这个用户&我需要加入以检索所有细节。在这种情况下,我如何管理主键。我不能把它自动生成,因为这也需要同时在其他表中输入,这是自动id无法实现的。
需要帮助?
答案 0 :(得分:2)
您仍应使用auto increment
作为主键。 (并在电子邮件地址列上设置UNIQUE CONSTRAINT。)
当用户通过您的表单登录时,您应该获取相关的行,并在会话期间(用户登录的时间)将其保存在某处:
SELECT * FROM users WHERE email='johndoe@example.com' AND PASSWORD=SHA1('secret');
然后,它会为您提供应在应用程序中的其他位置使用的数据
修改强>
如果您有2个表,1个包含用户,1个包含其个人资料,则这两个表之间存在一对一关系。这意味着两个表中的一个应该与另一个表有关系,在一对一的情况下,最好从另一个表中引用拥有表。由于用户拥有个人资料,这将归结为:
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 Documentation
请注意,您没有需要将外键指定为约束,您只需创建列,并以编程方式确保值正确且一致。但约束有许多优点:
ON DELETE CASCADE
)答案 1 :(得分:1)
您可以将整数id
设置为主键。首先,您必须更新用户表,然后对于插入记录,您可以获得id
值,然后您可以在其他表中插入其他用户相关信息。 Email
将是唯一的,因此您必须在插入任何用户之前检查是否存在电子邮件地址。我想这会对你有帮助。
答案 2 :(得分:1)
请使用自动递增的整数列作为用户表的主键。 使用该ID作为引用记录。您可以验证电子邮件的唯一性。
答案 3 :(得分:0)
只有id
应该是主键并自动递增它。您不应该将电子邮件作为主键。在注册之前,请检查电子邮件ID是否已存在。如果存在限制注册和重定向,则允许注册。
EG。注册表字段:id,name,email,password
用户个人资料信息字段:id,user_id,age,....
查询
select * from reg_table a inner join profile_info b on a.id=b.user_id where a.id=1
答案 4 :(得分:0)
你应该使用一个整数。因为这是您的用户引用,所以在更改邮件地址时,您必须更新所有引用表。
答案 5 :(得分:0)
磁盘空间不再像往常那样溢价,所以,另一个想法,一点争议的想法是你使用GUIDS作为主键,因为它们允许轻松合并数据库而变得更受欢迎。