У меня проблема, которая сводит меня с ума. Я искал в Интернете, но все, что я мог найти, было: данные, на которые ссылается внешний ключ, не вставлены. Ну, я проверил его как 100 раз, они вставлены.Код ошибки: 1452 в UPDATE MySQL
Мои таблицы:
Stundenanfrage:
CREATE TABLE IF NOT EXISTS Stundenanfrage(
LehrerKuerzel CHAR(10),
Anfangszeit TIMESTAMP,
Endzeit TIMESTAMP,
StundeGehalten TINYINT,
Akzeptiert TINYINT,
Lernprozess TEXT,
Sterne INT, -- 1-5 1 schlecht; 5 gut
BetrauNr INT REFERENCES ILB_Betrauung(BetrauNr),
PRIMARY KEY(LehrerKuerzel, Anfangszeit, Endzeit, BetrauNr),
FOREIGN KEY(LehrerKuerzel, Anfangszeit, Endzeit) REFERENCES Lehrerzeiten(LehrerKuerzel, Anfangszeit, Endzeit)
);
Lehrerzeiten:
CREATE TABLE IF NOT EXISTS Lehrerzeiten(
LehrerKuerzel CHAR(10) REFERENCES ILB_Lehrer,
Anfangszeit TIMESTAMP ,
Endzeit TIMESTAMP ,
Einzelunterricht TINYINT(1) DEFAULT 0,
Thema VARCHAR(100),
PRIMARY KEY(LehrerKuerzel, Anfangszeit, Endzeit)
);
И ilb_betrauung:
CREATE TABLE IF NOT EXISTS ILB_Betrauung(
BetrauNr INT PRIMARY KEY AUTO_INCREMENT,
LehrerKuerzel CHAR(10) REFERENCES ilb_lehrer,
MatNr CHAR(20) REFERENCES fw_schueler,
zweckmaeßig_erachtet_Lehrer TINYINT,
zweckmaeßig_erachtet_Schueler TINYINT,
Betrauung_AV TINYINT,
Eltern_informiert TINYINT
);
Введенный данные:
Мой запрос на обновление выглядит следующим образом:
UPDATE stundenanfrage SET Akzeptiert = 1
WHERE LehrerKuerzel = "bb" AND Anfangszeit = "2017-02-20 12:20:00" AND
Endzeit = "2017-02-20 13:00:00";
и бросил ошибку:
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`db_ilb`.`stundenanfrage`, CONSTRAINT `stundenanfrage_ibfk_1` FOREIGN KEY (`LehrerKuerzel`, `Anfangszeit`, `Endzeit`) REFERENCES `lehrerzeiten` (`LehrerKuerzel`, `Anfangszeit`, `Endzeit`)
Я также присоединился все таблицы и выбранные, что конкретная запись я хотел обновить:
SELECT * FROM stundenanfrage s
JOIN lehrerzeiten l ON s.Lehrerkuerzel = l.Lehrerkuerzel AND s.Anfangszeit =
l.Anfangszeit AND s.Endzeit = l.Endzeit
WHERE l.LehrerKuerzel = "bb" AND l.Anfangszeit = "2017-02-20 12:20:00" AND
l.Endzeit = "2017-02-20 13:00:00" AND s.BetrauNr = 1;
Вывод был тем, что одна запись я хотел обновить. Я также спросил своего учителя об этой ошибке, и она тоже не знала.
Снимите ограничение первого затем обновить, после обновления создать ограничение –
@SinghKailash какой смысл иметь ограничение, если вы удалите его, прежде чем сделать изменения? Не говоря уже о том, что на большой таблице удаление и воссоздание ограничения может занять довольно много времени. Итак, это очень плохое, даже вредное предложение! – Shadow
Возможно, у вас есть триггер на этой таблице, и он меняет некоторые значения при обновлении? Эта ошибка не имеет смысла. –