Код ошибки: 1452. Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено - PullRequest
0 голосов
/ 01 февраля 2012

Добрый вечер.

Для проекта мне нужно создать систему. В этой системе пользователи могут подписаться на мастер-класс. Администратор должен иметь возможность удалять пользователей и мастер-классы, но последние только , если никто не подписан на него.

Моя база данных:

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.

Понятия не имею, что я делаю не так. (

1 Ответ

1 голос
/ 01 февраля 2012

Если у вас есть ссылки на внешние ключи из одной таблицы (источника) в другую (цель), вам необходимо сначала настроить данные в этой целевой таблице .

В точке, гдевы вставляете (например) {5,1,1} в Geeft_masterclass (а во втором и третьем столбце содержатся внешние ключи), в таблицах Speler_masterclass или Masterclass нет данных, две таблицы, являющиеся целевымидля этих ограничений.

Быстрое решение, заполняет таблицы в том же порядке, в котором вы создаете их.Тогда данные должны существовать в таблицах назначения, что позволит ограничениям успешно работать в исходных таблицах:

  • Speler_masterclass;
  • Masterclass;
  • Geeft_masterclass, ссылки Speler_masterclass и Masterclass
  • Inschrijving_masterclass, ссылки Speler_masterclass и Masterclass.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...