2012-02-01 1 views
0

Добрый вечер.Код ошибки: 1452. Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа завершено

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

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

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. 

У меня нет понятия, что я делаю неправильно. :(

ответ

1

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

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

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

  • Speler_masterclass;
  • Masterclass;
  • Geeft_masterclass, ссылки Speler_masterclass и Masterclass; и
  • Inschrijving_masterclass, ссылки Speler_masterclass и Masterclass.
+0

Отлично. Это сработало, спасибо. :) –

 Смежные вопросы

  • Нет связанных вопросов^_^