繁体   English   中英

如何获得另一个表的外键引用的主键?

[英]How do I get the primary key being referenced by a foreign key of another table?

我在MySQL有两个表useruserprofile ,并且在我的Web服务器上有一个php脚本,用于处理将数据插入这些表中。

这是用于定义表的SQL命令。

CREATE TABLE user (
    USER_ID INT NOT NULL AUTO_INCREMENT,
    USERNAME VARCHAR(20),
    USER_PASSWORD VARCHAR(255),
    PRIMARY KEY (USER_ID)
);

CREATE TABLE userprofile (
    USER_ID INT NOT NULL,
    FULL_NAME VARCHAR(255),
    AGE INT,
    FOREIGN KEY (USER_ID) REFERENCES user (USER_ID)
);

我可以使用PHP函数内部执行的以下SQL命令"INSERT INTO user (USERNAME, USER_PASSWORD) VALUES ('$username', '$hashedPassword')"PHP user表成功写入数据库表。我定义的

我现在遇到的问题是,我需要添加诸如FULL_NAME和用户的AGE之类的信息。 由于我允许用户稍后再包含此信息(由于用户隐私,它们是可选的)。 在没有USER_ID情况下,如何准确填充数据库表userprofile

我查看了用于创建数据库表的文档,并且相信我的定义是正确的。 我最初的想法是实现一个从数据库中获取当前用户的USER_ID的功能,然后使用该功能将其数据插入到userprofile表中。 预期的行为,我想要的是增加与用户之后SQL上面的命令,在userprofile也将有一行创建,因为它是由一个外键链接USER_ID 我不太确定如何保证这两个表彼此同步。

要存储用户的姓名和年龄,您必须具有其USER_ID 这是因为您使用USER_ID作为用户的唯一标识符,并且它是userprofile表中的外键。

通常,当用户“登录”(对您的网站意味着什么)时,您将确定其USER_ID并将其用作会话变量(例如,在$_SESSION ),以便在后续页面(例如,页面)中使用它。他们在哪里编辑个人资料。

关于同步:根据您的定义,您无需与user同时将记录添加到userprofile中。 您可以,但是实际上是空的,因为您尚不知道他们的姓名或年龄。

这就是说,你还需要检查他们的是否userprofile已经存在。 也就是说,您是要更新他们的个人资料还是将其添加到其中。 因此,在创建他们的用户记录时,创建他们的用户配置文件记录会更加简单。 这样,您就知道自己一直在更新。

您应该添加UNIQUE约束USER_IDuserprofile模式。 这样,您就不会意外添加重复记录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM