3

我是一个完整的 SQL 初学者,我正在努力寻找一个非常简单问题的解决方案。

场景是这样的:当用户在我的网站上注册时,他们被插入到只有几列(user_id、用户名、电子邮件、密码、日期)的“用户”表中。

我不想在他们注册时再询问他们,但是我希望每个用户都有一个可选的设置页面,他们可以在其中输入其他用户信息,例如名字、姓氏、简历等。

为了保持我的数据库干净,我为此信息创建了第二个名为“user_info”的表。此表包括存在于“用户”中的“用户 ID”列。

我正在努力将这两个表联系起来。我想要它,所以每当将用户添加到“用户”表时,都会将具有相同“用户 ID”的新条目插入到“用户信息”中。这也需要用于删除用户。

到目前为止,我已经收集到需要使用 FOREIGN KEY 并尝试使用 CASCADE 来解决这个问题。

我的表如下所示:

CREATE TABLE users (
user_id INT AUTO_INCREMENT NOT NULL,
username VARCHAR(20) NOT NULL default '',
email VARCHAR(100) NOT NULL default '',  
password VARCHAR(100) NOT NULL default '',
create_date DATETIME NOT NULL default '0000-00-00',
PRIMARY KEY (user_id),
UNIQUE KEY (username),
UNIQUE KEY (email)
);

CREATE TABLE user_info (
    user_id INT NOT NULL,
    forename VARCHAR(30) NOT NULL default '',
    surname VARCHAR(30) NOT NULL default '',
    dob DATE NOT NULL default '0000-00-00',
    location VARCHAR(30) NOT NULL default '',
    PRIMARY KEY (user_id),
    FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE
);

我将不胜感激有关此问题的任何建议,以及有关一般最佳实践的任何建议!

亲切的问候

亚当

4

2 回答 2

1

看看触发器(http://dev.mysql.com/doc/refman/5.0/en/triggers.html)。

于 2012-06-28T16:06:54.717 回答
0

我也只是 sql 的初学者,我提供的解决方案可能不是最好的。您可以通过两种方式处理此问题

  • 在您的用户表中查找最后插入的 id,然后在 user_info 中使用获取的 id 插入一条空白记录。

    由于您的用户 ID 是主键,因此每次插入时只需执行此操作:

从用户中选择最大值(USER_ID)

将获取的结果存储在变量中,然后将变量的值插入 user_info 表中

INSERT INTO user_info (user_id) VALUES ('.$theValueInTHeVariable.');

  • 第二种方法是使用触发器

在此解决方案中,您可以创建一个触发器,以便每当将新 id 插入 users 表时,它会自动获取最后生成的 user_id 并将其插入到 Users_info 表中。

有关触发器的更多信息,请参阅以下站点。

链接1 链接 2

如果您仍然遇到任何问题,请回帖。

于 2012-06-29T10:39:37.953 回答