2012-06-28 37 views
3

我是一个完整的SQL初学者,我正在努力寻找一个非常简单的问题的解决方案。自动在另一个表中创建(并删除条目)

情景是这样的:当用户在我的网站上注册时,它们被插入只有少数列(user_id,用户名,电子邮件,密码,日期)的'用户'表中。

我不想在注册时询问了他们的,但是我想,每个用户都有一个可选的设置页面,在这里他们可以输入额外的用户信息,如用的名字,姓氏,生物等

为了保持我的数据库清洁,我为此信息创建了第二个名为'user_info'的表。此表格包含'用户'中存在的'user_id'列。

我正在努力的是链接这两个表。我需要它,所以无论何时将用户添加到“用户”表中,都会使用相同的“user_id”将新条目插入到'user_info'中。这也需要用于删除用户。

到目前为止,我收集到使用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 
); 

我会在这个问题上欣赏任何意见,任何建议沿着一般的最佳实践!

亲切的问候

亚当

+0

外键+级联需要InnoDB引擎,它们不能与MyISAM一起使用。 – biziclop

回答

0

我也只是一个初学者在SQL和我提供的解决方案可能不是最好的。你可以处理这个问题的方式有两种

  • 找到最后插入的ID在你的用户表,然后用所获取的ID的USER_INFO插入一个空白记录。

    因为你的用户ID是主键,简单地做到这一点,每次当你插入:

SELECT MAX(USER_ID)FROM用户

店所取得的结果在变量中,然后在user_info表中插入变量的值

INSERT INTO user_info(user_id)VALUES('。$ $ ValueInTHeVariable');

  • 第二种方法是使用触发器
在这个解决方案

,你可以做一个触发器,每当一个新的ID被插入到用户表,它会自动获取最后生成的USER_ID和插入它进入Users_info表。

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

link1 link2

如果仍然遇到任何问题,那么请回来后。

相关问题