Ich weiß nicht weiter - Error 1452: Cannot add or update child row

jolive_

Benutzer
Beiträge
6
Hallo liebe SQL-Community,

ich habe ein Problem. Bin blutige Anfängerin (tatsächlich setze mich erst seit heute mit dem Thema Datenbanken auseinander) und gerade komplett überfragt, wo mein Fehler liegt bzw. was der Error-Code bedeutet.

Ich habe eine Tabelle erstellt mit zwei Fremdschlüsseln, die gleichzeitig aber auch Primärschlüssel sind.

oGJgaJV.png


Der Fremdschlüssel SpielerID verweist u. a. auf diese Tabelle (Die andere Tabelle wird im Fehlercode nicht genannt, deswegen glaube ich, dass da alles passt):

PVeCMDd.png


Wenn ich nun die Tabelle "spielt" mit Werten befüllen will, erscheint mit dieser Fehlercode:

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`vfbdatenbank`.`spielt`, CONSTRAINT `spielt_ibfk_2` FOREIGN KEY (`SpielerID`) REFERENCES `spieler` (`SpielerID`))

Weiß vielleicht jemand, was ich falsch gemacht habe?
Ich kann auch gerne noch mehr Infos geben, falls nötig, bin mir nicht sicher, was man für die Problemlösung alles benötigt.

Ich wäre super dankbar, wenn mir jemand helfen könnte :)
 
Werbung:
Ich kann auch gerne noch mehr Infos geben, falls nötig,

es wäre besser, anstatt Bilder copy&paste - fähige SQL-Befehle zu zeigen, z.B.:

Code:
test=# create table spieler (id int primary key, name text);
CREATE TABLE
test=*# create table spiele (id int primary key, spieler1 int references spieler);
CREATE TABLE
test=*# insert into spiele (id, spieler1) values (1,1);
FEHLER:  Einfügen oder Aktualisieren in Tabelle »spiele« verletzt Fremdschlüssel-Constraint »spiele_spieler1_fkey«
DETAIL:  Schlüssel (spieler1)=(1) ist nicht in Tabelle »spieler« vorhanden.
test=*# insert into spieler (id, name) values (1, 'Max');
INSERT 0 1
test=*# insert into spiele (id, spieler1) values (1,1);
INSERT 0 1
test=*#

Du erkennst Deinen Fehler?
 
Danke @akretschmer für die schnelle Antwort!
Ja, ich weiß dass ein Fremdschlüssel quasi eine Verknüpfung zum Primärschlüssel einer anderen Tabelle ist.
Allerdings verstehe ich leider nicht so ganz, was der Code zu bedeuten hat, den Du geantwortet hast :oops:

Einfügen oder Aktualisieren in Tabelle »spiele« verletzt Fremdschlüssel-Constraint »spiele_spieler1_fkey«

Vor allem diesen Fehler hier verstehe ich nicht. Was ist ein Fremdschlüssel-Constraint? Und wieso ist der Schlüssel nicht in der Tabelle Spieler enthalten, ich habe doch dort SpielerID als Primärschlüssel gesetzt? :(

Vielleicht hast Du ja die Motivation, das auszuformulieren?

Grüße gehen raus!
 
Ein Foreign Key Constraint bedeutet, daß beim Einfügen eines Datensatzes (bei mir in Tabelle spiele) geprüft wird, ob es in Spieler einen Datensatz mit der id=1 gibt. Dies ist im ersten Versuch nicht der Fall, daher schlägt die Prüfung des Constraints fehl, der Datensatz kann nicht eingefügt werden. Das nennt sich auch referentielle Integrität.
 
es wäre besser, anstatt Bilder copy&paste - fähige SQL-Befehle zu zeigen

Und kann ich den Code, den ich bisher geschriebenhabe irgendwie abrufen? Dann könnte ich auch was copy/pasten? :D

Dazu haben ich nämlich nichts gefunden, mir wird immer nur angezeigt, was jetzt meine Spalten sind und ich kann die Inhalte der Tabelle abrufen (sofern sie sich ohne Fehler-Code befüllen lässt) aber nicht den ursprüngliche Code...
 
Ein Foreign Key Constraint bedeutet, daß beim Einfügen eines Datensatzes (bei mir in Tabelle spiele) geprüft wird, ob es in Spieler einen Datensatz mit der id=1 gibt. Dies ist im ersten Versuch nicht der Fall, daher schlägt die Prüfung des Constraints fehl, der Datensatz kann nicht eingefügt werden. Das nennt sich auch referentielle Integrität.

Also in meiner Tabelle "Spieler" sind bei ID alle Datensätze von 1-30 drin, und in der Tabelle "spielt" werden auch keine neuen Datensätze eingefügt, nur die, die bereits in "Spieler" stehen habe
 
Okay ich habe den Fehler gefunden :D Sehr peinlich: Ich habe lediglich eine SpielerID-Nummer vergessen aufzuführen, auf die ich mich bezogen hatte :D:D

Dass es im Endeffekt immer so etwas einfaches sein muss... Vielen Dank trotzdem für Deine Hilfe @akretschmer !!
Schönen Tag noch :)
 
Werbung:
Sehr peinlich: Ich habe lediglich eine SpielerID-Nummer vergessen aufzuführen, auf die ich mich bezogen hatte

schau an, wie in meinem Beispiel gezeigt.

Probier mal in MySQL:

Code:
test=*# create table demo(i int, check(i < 10));
CREATE TABLE
test=*# insert into demo values (12);
FEHLER:  neue Zeile für Relation »demo« verletzt Check-Constraint »demo_i_check«
DETAIL:  Fehlgeschlagene Zeile enthält (12).
test=*#

Und frage den Prof, warum das in MySQL so ist ...
 
Zurück
Oben