2011-02-15 72 views
0

我有2个表:让说表1(用户ID,用户名,密码)和表2(用户ID,A,B,C)。Mysql数据库 - 主键问题

表1具有用户ID字段(主键),表2还具有用户ID(参照表1)。

如果我做一个INSERT语句添加行到表2,如何表2生成的用户ID字段?

编辑: 我想插入东西到表2,其中表2中的用户ID必须在表1匹配用户ID - 做什么限制,我需要建立

+0

您必须将表2的userid分配给引用表1,但您很可能希望为表2自身具有唯一的主ID。所以,你会有(tableid,userid,a,b,c) – kjy112 2011-02-15 13:46:25

回答

0

如果对表2的用户ID字段不自动增量然后必须提供值或插入将失败。

+0

没问题,所以如果我在表2中为用户标识添加自动增量,它会根据表1的用户标识改变字段? – Steve 2011-02-15 13:47:13

+0

不,它会生成一个全新的ID - 你需要自己提供一个ID为1的ID自己 – 2011-02-15 13:48:08

0

如果如果定义在表2用户ID作为foriegn键约束用户名和密码不为空,那么请不要在TABEL 1插入并给出错误

0

,那么你就需要有相应的用户ID在table1作为将行插入到table2时的引用,否则如果您尚未定义任何此类约束,则无关紧要。

请记住,如果约束定义,然后表2本身不会产生ID。它将要求该ID存在于被引用的table1列中。

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.userid存在的数据库引擎。 ON DELETEON UPDATE子句将导致删除table1中的行以自动删除/更新table2中的行。

您不能在table2中创建一行,直到您在table1中为用户创建了一行。 table1中的行将自动生成userid。当您插入table2时,您将显式包含table1中的用户标识以建立行之间的链接。