2017-02-20 8 views
2

Ich habe ein Problem, das mich verrückt macht. Ich suchte im Internet, aber alles, was ich finden konnte, war: Die Daten, auf die der Fremdschlüssel verweist, werden nicht eingefügt. Nun, ich habe es 100 mal überprüft, sie sind eingefügt.Fehlercode: 1452 auf UPDATE MySQL

Meine Tabellen sind:

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) 
); 

Und 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 
); 

Die Daten eingefügt:

Inserts

Meine Update-Abfrage sieht wie folgt aus:

UPDATE stundenanfrage SET Akzeptiert = 1 
WHERE LehrerKuerzel = "bb" AND Anfangszeit = "2017-02-20 12:20:00" AND 
Endzeit = "2017-02-20 13:00:00"; 

und warf einen Fehler:

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`) 

Ich trat auch alle Tabellen und ausgewählt, dass bestimmte Platte, die ich aktualisieren wollte:

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; 

Die Ausgabe war jener Datensatz, den ich aktualisieren wollte. Ich fragte meine Lehrerin auch nach diesem Fehler und sie hatte auch keine Ahnung.

+0

Remove Einschränkung zuerst, dann aktualisieren, nach dem Update Einschränkung –

+0

@SinghKailash schaffen, was der Punkt ist ein Zwang, wenn Sie es entfernen, bevor Sie eine Änderung vornehmen? Ganz zu schweigen von der Tatsache, dass das Entfernen und Wiederherstellen einer Einschränkung auf einem großen Tisch ziemlich viel Zeit in Anspruch nehmen kann. Also, das ist ein sehr schlechter, sogar schädlicher Vorschlag! – Shadow

+2

Vielleicht haben Sie Trigger auf dieser Tabelle und es ändert sich einige Werte bei der Aktualisierung? Dieser Fehler ergibt sonst keinen Sinn. –

Antwort

2

prüfen Extra:

mysql> DESC `Stundenanfrage`; 
+----------------+------------+------+-----+-------------------+-----------------------------+ 
| Field   | Type  | Null | Key | Default   | Extra      | 
+----------------+------------+------+-----+-------------------+-----------------------------+ 
| LehrerKuerzel | char(10) | NO | PRI | NULL    |        | 
| Anfangszeit | timestamp | NO | PRI | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | 
| Endzeit  | timestamp | NO | PRI | NULL    |        | 
| StundeGehalten | tinyint(4) | YES |  | NULL    |        | 
| Akzeptiert  | tinyint(4) | YES |  | NULL    |        | 
| Lernprozess | text  | YES |  | NULL    |        | 
| Sterne   | int(11) | YES |  | NULL    |        | 
| BetrauNr  | int(11) | NO | PRI | NULL    |        | 
+----------------+------------+------+-----+-------------------+-----------------------------+ 
8 rows in set (0.00 sec) 

Siehe auch: 12.3.5 Automatic Initialization and Updating for TIMESTAMP and DATETIME.

Versuchen:

CREATE TABLE IF NOT EXISTS Stundenanfrage (
    LehrerKuerzel CHAR(10), 
    Anfangszeit TIMESTAMP DEFAULT CURRENT_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) 
); 

mysql> DESC `Stundenanfrage`; 
+----------------+------------+------+-----+-------------------+-------+ 
| Field   | Type  | Null | Key | Default   | Extra | 
+----------------+------------+------+-----+-------------------+-------+ 
| LehrerKuerzel | char(10) | NO | PRI | NULL    |  | 
| Anfangszeit | timestamp | NO | PRI | CURRENT_TIMESTAMP |  | 
| Endzeit  | timestamp | NO | PRI | NULL    |  | 
| StundeGehalten | tinyint(4) | YES |  | NULL    |  | 
| Akzeptiert  | tinyint(4) | YES |  | NULL    |  | 
| Lernprozess | text  | YES |  | NULL    |  | 
| Sterne   | int(11) | YES |  | NULL    |  | 
| BetrauNr  | int(11) | NO | PRI | NULL    |  | 
+----------------+------------+------+-----+-------------------+-------+ 
8 rows in set (0.00 sec) 
+0

Guter Ort! Ich hatte das Gefühl, dass es an den Zeitstempeln lag, aber ich konnte mich nicht darum kümmern – Shadow

+0

Vielen Dank !! Ich wusste nicht, dass das Standard ist. Es funktioniert jetzt. –

+0

Auch danke @Shadow. Dein Vorschlag hat auch funktioniert. –

Verwandte Themen