错误代码:1452。无法添加或更新子行:外键约束失败

发布于 2025-01-01 15:57:26 字数 3783 浏览 2 评论 0原文

晚上好。

对于一个项目,我必须创建一个系统。在这个系统中,用户可以订阅大师班。管理员应该能够删除用户和大师类,但后者如果没有用户订阅它。

我的数据库:

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 protected]', 0)
;
INSERT INTO Speler_masterclass
VALUES (2, 'Speler 2', 'Adres', 'postcode','Den Haag', '0612345678', '[email protected]', 0)
;
INSERT INTO Speler_masterclass
VALUES (3, 'Speler 3', 'Adres', 'postcode','Den Haag', '0612345678', '[email protected]', 0)
;

但是,如果我尝试这样做,我会收到以下错误:

Error code: 1452. Cannot add or update a child row: a foreign key constraint fails.

我不知道我做错了什么。 :(

Good evening.

For a project, I have to create a system. In this system, users can subscribe for a masterclass. The administrator should be able to delete users and masterclasses, but the latter only if no users has subscribed to it.

My database:

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;

IN this, I want to insert the following:

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 protected]', 0)
;
INSERT INTO Speler_masterclass
VALUES (2, 'Speler 2', 'Adres', 'postcode','Den Haag', '0612345678', '[email protected]', 0)
;
INSERT INTO Speler_masterclass
VALUES (3, 'Speler 3', 'Adres', 'postcode','Den Haag', '0612345678', '[email protected]', 0)
;

HOWEVER, if I try to do so, I get the following error:

Error code: 1452. Cannot add or update a child row: a foreign key constraint fails.

I have not got a clue what I'm doing wrong. :(

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

◇流星雨 2025-01-08 15:57:26

当您有从一个表(源)到另一个表(目标)的外键引用时,您需要首先在该目标表中设置数据。

在您要插入的位置(例如) {5,1,1}Geeft_masterclass (并且第二列和第三列有外键约束),Speler_masterclass 中没有数据或者Masterclass 表,这两个表是这些约束的目标。

快速解决方案,按照您创建表的顺序填充表。然后数据应该存在于目标表中,这将允许约束在源表中成功:

  • Speler_masterclass
  • 大师班
  • Geeft_masterclass,参考Speler_masterclassMasterclass;和
  • Inschrijving_masterclass,参考 Speler_masterclassMasterclass

When you have foreign key references from one table (source) into another (target), you need to set up the data in that target table first.

At the point where you're inserting (for example) {5,1,1} into Geeft_masterclass (and those second and third column have foreign key constaints), there is no data in the Speler_masterclass or Masterclass tables, the two tables which are the targets for those constraints.

Quick solution, populate the tables in the same order that you create them. Then the data should exist in the target tables which will allow the constraints to succeed in the source tables:

  • Speler_masterclass;
  • Masterclass;
  • Geeft_masterclass, references Speler_masterclass and Masterclass; and
  • Inschrijving_masterclass, references Speler_masterclass and Masterclass.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文