簡體   English   中英

如何更新或插入具有來自父表的外鍵約束的子表

[英]How to update or insert a child table which having foreign key constrains from parent table

我有以下兩個父表(UserLogins、UserSecurityQuestions)和一個子表 - UserSecurityAnswers


#Parent Table
CREATE TABLE UserLogins
(
    UserLoginID SMALLINT NOT NULL IDENTITY(1,1),
    UserLogin VARCHAR(50) NOT NULL,
    UserPassword VARCHAR(20) NOT NULL,
    CONSTRAINT pk_UL_UserLoginID PRIMARY KEY(UserLoginID)
);


CREATE TABLE UserSecurityQuestions
(
    UserSecurityQuestionID TINYINT NOT NULL IDENTITY(1,1),
    UserSecurityQuestion VARCHAR(50) NOT NULL,
    CONSTRAINT pk_USQ_UserSecurityQuestionID PRIMARY KEY(UserSecurityQuestionID)
);

#子表


CREATE TABLE UserSecurityAnswers
(
    UserLoginID SMALLINT NOT NULL IDENTITY(1,1),
    UserSecurityAnswers VARCHAR(25) NOT NULL,
    UserSecurityQuestionID TINYINT NOT NULL,
    CONSTRAINT pk_USA_UserLoginID PRIMARY KEY(UserLoginID), 
    CONSTRAINT fk_UL_UserLoginID FOREIGN KEY(UserLoginID) REFERENCES UserLogins(UserLoginID),
    CONSTRAINT fk_USQ_UserSecurityQuestionID FOREIGN KEY(UserSecurityQuestionID) REFERENCES UserSecurityQuestions(UserSecurityQuestionID)
);

#INsert 值到父表

#UserLogins 
insert into UserLogins values('User1', 'Pass1');
insert into UserLogins values('User2', 'Pass2');
insert into UserLogins values('User3', 'Pass3');
insert into UserLogins values('User4', 'Pass4');
insert into UserLogins values('User5', 'Pass5');

#UserSecurityQuestions 
insert into UserSecurityQuestions values('What is your favourite food?');
insert into UserSecurityQuestions values('What is your favourite food?');
insert into UserSecurityQuestions values('What is your favourite food?');
insert into UserSecurityQuestions values('What is your favourite food?');
insert into UserSecurityQuestions values('What is your favourite food?');

現在我正在用以下值更新表 UserSecurityAnswers

insert into UserSecurityAnswers values('Apples');
insert into UserSecurityAnswers values('Spiderman');
insert into UserSecurityAnswers values('School1');
insert into UserSecurityAnswers values('Ram');
insert into UserSecurityAnswers values('Toyota');

但我得到低於錯誤

Column name or number of supplied values does not match table definition.

在這種情況下,我希望子表會從父表繼承值。 但不確定這個實現有什么問題

有什么幫助嗎?

如果主鍵作為增量給出,則在插入過程中只會自動獲取主鍵。 您必須提供的所有其他列,如果您只是給出“應用”,則數據庫不知道 map 它針對父 FK id。

在將查詢插入到 Answers 表中,包括來自其他兩個表的 PK 值。

順便說一句-您沒有更新 securityanswer 表,您正在嘗試插入新的。 所以 FK 列是強制性的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM