Fremdschlüssel

VTG--Flo

Neuer Benutzer
Beiträge
4
Guten Tag,
ich versuche gerade die SQL Programmierung zu lernen.

Ich habe noch nicht so viel erfahrung aber schreibe immer alle Befehle mit und erläutere für mich selber das Buch SQL Handbuch für Einsteiger (Paul Fuchs - 2021).

Bin jetzt ungefährt bei der hälfte und komme einfach nicht weiter.

Ich bin 1 zu 1 nach buch vorgegangen dennoch scheint es so als ob ich einen Fehler gemacht habe nur finde ich Ihn nicht.



Unbenannt.PNG

TABLE 1

CREATE TABLE IF NOT EXISTS sportangebot(
sportangebot_id INT PRIMARY KEY AUTO_INCREMENT,
sportangebot_sportart VARCHAR(20) NOT NULL,
sportangebot_teilnehmer INT NOT NULL
);
INSERT INTO sportangebot (sportangebot_sportart, sportangebot_teilnehmer) VALUES
("Volleyball", 1),
("Volleyball", 3),
("Volleyball", 6),
("Volleyball", 7),
("Fußball", 3),
("Fußball", 5),
("Fußball", 8),
("Handball", 8);

------------------------------------------------------------------------------------------------------------------------------

TABLE 2

CREATE TABLE IF NOT EXISTS sportangebot2(
sportangebot_id INT PRIMARY KEY AUTO_INCREMENT,
sportangebot_sportart VARCHAR (29) NOT NULL,
sportangebot_teilnehmer INT NOT NULL,
FOREIGN KEY (sportangebot_teilnehmer) REFERENCES mitglieder (mitglieder_id)
);

SELECT * FROM sportangebot2;

INSERT INTO sportangebot2 (sportangebot_sportart, sportangebot_teilnehmer) VALUES
("Volleyball", 1),
("Volleyball", 3),
("Volleyball", 6),
("Volleyball", 7),
("Fußball", 3),
("Fußball", 5),
("Fußball", 8),
("Handball", 8);
------------------------------------------------------------------------------------------------------------------------------

Laut Buch kann ich in TABLE 2 werte einfügen obwohl noch keine vorhanden sind.
Da es eine untergeordnete Tabelle ist kann ich doch eig. keine werte einfügen wenn sie nicht schon bestehen sind oder?


TABLE 1
20210826_094618.jpg


TABLE2
20210826_094522.jpg
Kann mir bitte jmd sagen wieso ich immer wieder den ErrorCode -
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`vereindb`.`sportangebote2`, CONSTRAINT `sportangebote2_ibfk_1` FOREIGN KEY (`sportangebote_teilnehmer`) REFERENCES `mitglieder` (`mitglieder_id`)) 0.062 sec

mir ist schon bewusst dass in eine untergeordnete Tabelle die mit einem Fremndschlüssel gekennzeichnet ist keine werte eingefügt werden können wenn, sie nicht schon vorhanden sind.

Aber wieso funktioniert es dann im buch und bei mir nicht :'(
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.731
vielleicht wurde im Buch MySQL verwendet ;-)

Im Ernst: korrekt, wenn da ein Foreign Key definiert ist, und der Wert, der versucht wird einzugeben in der referenzierten Tabelle nicht vorhanden ist, dann MUß da ein Fehler kommen. Du kannst jetzt dem Autor des Buches auf dieses Problem aufmerksam machen.
Möglicherweise einfach nur methodisch falsch aufgebaut.
 

VTG--Flo

Neuer Benutzer
Beiträge
4
Danke für die schnelle Antwort. Ich benutze auch MySQL Workbench


Also ist es besser wenn ich erst die werte für sportangebot2 (z.b. Voleyball fuß.. etc) eintrage und dann den Key vergebe oder ?
 

akretschmer

Datenbank-Guru
Beiträge
9.731
man kann das sogar in einem einzelnen Statement machen - wenn man eine wirklich gute Datenbank besitzt ;-)

Code:
edb=# create table master(master_id int generated always as identity primary key, name text);
CREATE TABLE
edb=*# create table detail (master_id int references master, wert int);
CREATE TABLE
edb=*# with new_id as (insert into master (name) values ('Name1') returning master_id) insert into detail select new_id.master_id, 27 from new_id;
INSERT 0 1
edb=*# select * from master;
 master_id | name  
-----------+-------
         1 | Name1
(1 row)

edb=*# select * from detail;
 master_id | wert
-----------+------
         1 |   27
(1 row)

edb=*#

Wie Du siehst, in dem Statement, welches mit 'with' beginn, fülle ich mit einem Befehl gleichzeitig 2 Tabellen, die automatisch vergebene ID der master-Tabelle wird dann auch in detail eingetragen.
 

VTG--Flo

Neuer Benutzer
Beiträge
4
Was für eine Datenbank benutzt Du jetzt? Du hast Dein Thema im Microsoft-SQL-Server-Forum eröffnet, schreibst aber was von MySql-Workbenche? Das passt nicht zusammen, das sind zwei völlig verschiedene Datenbanksysteme.
Entschuldigung ich bin davon ausgegangen ich habe meine Beitrag in MySQL MARIADB erstellt....
 

VTG--Flo

Neuer Benutzer
Beiträge
4
Habe mein Fehler gefunden ich hatte zwar die ID's aus der ElternTabelle (mitglieder_ID) übernommen allerdings einen wert in der KindTabelle hinzugefügt der noch nicht in der mitglieder_id stand dadurch kam der Fehler zu stande.
 
Werbung:
Oben