Mysql数据库 - 主键问题
我有2个表:让说表1(用户ID,用户名,密码)和表2(用户ID,A,B,C)。Mysql数据库 - 主键问题
表1具有用户ID字段(主键),表2还具有用户ID(参照表1)。
如果我做一个INSERT语句添加行到表2,如何表2生成的用户ID字段?
编辑: 我想插入东西到表2,其中表2中的用户ID必须在表1匹配用户ID - 做什么限制,我需要建立
如果对表2的用户ID字段不自动增量然后你必须提供值或插入将失败。
没问题,所以如果我在表2中为用户标识添加自动增量,它会根据表1的用户标识改变字段? – Steve 2011-02-15 13:47:13
不,它会生成一个全新的ID - 你需要自己提供一个ID为1的ID自己 – 2011-02-15 13:48:08
如果如果定义在表2用户ID作为foriegn键约束用户名和密码不为空,那么请不要在TABEL 1插入并给出错误
,那么你就需要有相应的用户ID在table1作为将行插入到table2时的引用,否则如果您尚未定义任何此类约束,则无关紧要。
请记住,如果约束定义,然后表2本身不会产生ID。它将要求该ID存在于被引用的table1列中。
数据库不理解table1
和table2
之间的关系,除非你明确的指定。如果您使用支持它们的数据库引擎(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 DELETE
和ON UPDATE
子句将导致删除table1
中的行以自动删除/更新table2
中的行。
您不能在table2
中创建一行,直到您在table1
中为用户创建了一行。 table1
中的行将自动生成userid
。当您插入table2
时,您将显式包含table1
中的用户标识以建立行之间的链接。
您必须将表2的userid分配给引用表1,但您很可能希望为表2自身具有唯一的主ID。所以,你会有(tableid,userid,a,b,c) – kjy112 2011-02-15 13:46:25