晚上好。
对于一个项目,我必须创建一个系统。在此系统中,用户可以订阅大师班。管理员应该能够删除用户和大师班,但如果没有用户订阅,则后者 。
我的数据库:
CREATE TABLE IF NOT EXISTS Speler_masterclass (
Sid INT(11) NOT NULL AUTO_INCREMENT,
naam VARCHAR(50) NOT NULL,
adres VARCHAR(100) NOT NULL,
postcode VARCHAR(100) NOT NULL,
woonplaats VARCHAR(100) NOT NULL,
telefoonnr INT(20) NOT NULL,
email VARCHAR(100) NOT NULL,
ratingscore INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY(Sid)
)ENGINE=InnoDb;
CREATE TABLE IF NOT EXISTS db11071230.Masterclass (
Mid INT(11) NOT NULL AUTO_INCREMENT,
naam VARCHAR(50) NOT NULL,
tijd VARCHAR(20) NOT NULL,
datum VARCHAR(10) NOT NULL,
plaats VARCHAR(100) NOT NULL,
minimale_rating INT(11) NOT NULL,
PRIMARY KEY (Mid)
) ENGINE=InnoDb;
CREATE TABLE IF NOT EXISTS db11071230.Geeft_masterclass (
Rankingspunten_cadeau INT(11) NOT NULL,
Sid INT(11) NOT NULL,
Mid INT(11) NOT NULL,
FOREIGN KEY (Sid) REFERENCES Speler_masterclass (Sid),
FOREIGN KEY (Mid) REFERENCES Masterclass (Mid),
PRIMARY KEY (Sid, Mid)
) ENGINE=InnoDb;
CREATE TABLE IF NOT EXISTS db11071230.Inschrijving_masterclass (
betaling INT(1) NOT NULL,
Sid INT(11) NOT NULL ,
Mid INT(11) NOT NULL ,
FOREIGN KEY (Sid) REFERENCES Speler_masterclass (Sid),
FOREIGN KEY (Mid) REFERENCES Masterclass (Mid)
ON DELETE RESTRICT
ON UPDATE CASCADE,
PRIMARY KEY (Sid, Mid)
) ENGINE=InnoDb;
在此,我想插入以下内容:
INSERT INTO Geeft_masterclass
VALUES (5, 1, 1)
;
INSERT INTO Geeft_masterclass
VALUES (6, 2, 2)
;
INSERT INTO Geeft_masterclass
VALUES (7, 2, 2)
;
INSERT INTO Inschrijving_masterclass
VALUES (0, 1, 1)
;
INSERT INTO Inschrijving_masterclass
VALUES (1, 2, 1)
;
INSERT INTO Inschrijving_masterclass
VALUES (1, 3, 2)
;
INSERT INTO Masterclass
VALUES (1, 'Masterclass 1', '10.30 uur', '15-2-2012',' Den Haag', 10)
;
INSERT INTO Masterclass
VALUES (2, 'Masterclass 2', '11.30 uur', '16-2-2012',' Den Haag', 11)
;
INSERT INTO Masterclass
VALUES (3, 'Masterclass 3', '12.30 uur', '17-2-2012',' Den Haag', 12)
;
INSERT INTO Speler_masterclass
VALUES (1, 'Speler 1', 'Adres', 'postcode','Den Haag', '0612345678', 'email@adres.nl', 0)
;
INSERT INTO Speler_masterclass
VALUES (2, 'Speler 2', 'Adres', 'postcode','Den Haag', '0612345678', 'email@adres.nl', 0)
;
INSERT INTO Speler_masterclass
VALUES (3, 'Speler 3', 'Adres', 'postcode','Den Haag', '0612345678', 'email@adres.nl', 0)
;
但是,如果我尝试这样做,我会收到以下错误:
Error code: 1452. Cannot add or update a child row: a foreign key constraint fails.
我不知道我做错了什么。 :(
答案 0 :(得分:1)
当您从一个表(源)到另一个表(目标)的外键引用时,您需要首先在该目标表中设置数据。
在您将{5,1,1}
插入Geeft_masterclass
(并且第二和第三列具有外键重量)的位置,Speler_masterclass
中没有数据或Masterclass
表,这两个表是这些约束的目标。
快速解决方案,以创建它们的顺序填充表格。然后数据应该存在于目标表中,这将允许约束在源表中成功:
Speler_masterclass
; Masterclass
; Geeft_masterclass
,引用Speler_masterclass
和Masterclass
;和Inschrijving_masterclass
,引用Speler_masterclass
和Masterclass
。