Mysql数据库 - 主键问题

时间:2011-02-15 13:43:37

标签: mysql

我有2个表:比如表1(用户ID,用户名,密码)和表2(用户ID,a,b,c)。

表1有一个userid字段(主键),表2也有userid(引用表1)。

如果我执行insert语句,要向表2添加一行,表2如何生成userid字段?

编辑: 我想在表2中插入内容,其中表2中的userid必须与表1中的userid匹配 - 我需要设置哪些约束

4 个答案:

答案 0 :(得分:1)

除非您明确指定,否则数据库无法理解table1table2之间的关系。如果您使用支持它们的数据库引擎(InnoDB),则可以使用SQL foreign keys

CREATE TABLE table1 (
    userid INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL);
CREATE TABLE table2 (
    rowid INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
    userid INTEGER NOT NULL
        REFERENCES table1(userid)
        ON DELETE CASCADE ON UPDATE CASCADE
    -- other columns here
);

REFERENCES选项会告诉数据库引擎table2.userid要求table1中存在一行table1.userid = table2.useridON DELETEON UPDATE子句会导致删除table1中的行,以自动删除/更新table2中的行。

table2中为用户创建行之前,您无法在table1中创建行。 table1中的行会自动生成userid。当您插入table2时,您将明确包含table1中的用户ID以建立行之间的链接。

答案 1 :(得分:0)

如果table2上的userid字段不是自动增量,那么必须提供值,否则插入将失败。

答案 2 :(得分:0)

如果用户名和密码不为null,则不要在表1中插入并给出错误

答案 3 :(得分:0)

如果您已将table2中的userID定义为 foriegn key constraint ,那么在将行插入table2时,您需要将table1中的相应userID作为参考,否则如果您尚未定义任何此类约束,那就无所谓了。

请记住,如果定义了约束,那么table2将不会自己生成ID。它需要ID出现在引用的table1列中。