我有2个表:比如表1(用户ID,用户名,密码)和表2(用户ID,a,b,c)。
表1有一个userid字段(主键),表2也有userid(引用表1)。
如果我执行insert语句,要向表2添加一行,表2如何生成userid字段?
编辑: 我想在表2中插入内容,其中表2中的userid必须与表1中的userid匹配 - 我需要设置哪些约束
答案 0 :(得分:1)
除非您明确指定,否则数据库无法理解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
中的用户ID以建立行之间的链接。
答案 1 :(得分:0)
如果table2上的userid字段不是自动增量,那么你必须提供值,否则插入将失败。
答案 2 :(得分:0)
如果用户名和密码不为null,则不要在表1中插入并给出错误
答案 3 :(得分:0)
如果您已将table2中的userID定义为 foriegn key constraint ,那么在将行插入table2时,您需要将table1中的相应userID作为参考,否则如果您尚未定义任何此类约束,那就无所谓了。
请记住,如果定义了约束,那么table2将不会自己生成ID。它需要ID出现在引用的table1列中。