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

时间:2017-01-07 07:13:21

标签: php mysql database

我在user中有两个表userprofileMySQL,我的网络服务器上有一个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)
);

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

我现在遇到的问题是,我要说我需要添加用户的FULL_NAMEAGE等信息。由于我允许用户稍后包含此信息(由于用户隐私,它们是可选的)。如果没有userprofile

,我究竟如何填充数据库表USER_ID

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

1 个答案:

答案 0 :(得分:1)

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

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

关于同步:根据您的定义,您无需在userprofile的同时向user添加记录。你可以,但它实际上是空的,因为你还不知道他们的名字或年龄。

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

您应该在UNIQUE架构中向USER_ID添加userprofile约束。这样,您就不会意外添加重复记录。

相关问题