Verletzung der Integrität möglich obwohl FK
*Markus
- datenbank
Hallo,
mit folgendem Datenmodell...

und folgendem MySQL-Script...
CREATE TABLE IF NOT EXISTS Artikel
(a_id INTEGER NOT NULL AUTO_INCREMENT,
h_id INTEGER NOT NULL ,
a_bez VARCHAR(100) NULL,
a_bild VARCHAR(100) NULL,
PRIMARY KEY (a_id)
);
CREATE UNIQUE INDEX XPKArtikel
ON Artikel
(
a_id
);
CREATE TABLE IF NOT EXISTS Artikel_Supermarkt
(s_id INTEGER NOT NULL,
a_id INTEGER NOT NULL,
eh_id INTEGER NULL,
preis FLOAT NULL,
PRIMARY KEY (s_id,a_id)
);
CREATE UNIQUE INDEX XPKArtikel_Supermarkt
ON Artikel_Supermarkt
(
s_id,
a_id
);
CREATE TABLE IF NOT EXISTS Einheit
(eh_id INTEGER NOT NULL AUTO_INCREMENT,
eh_bez VARCHAR(5) NULL,
PRIMARY KEY (eh_id)
);
CREATE UNIQUE INDEX XPKEinheit
ON Einheit
(
eh_id
);
CREATE TABLE IF NOT EXISTS Hersteller
(h_id INTEGER NOT NULL AUTO_INCREMENT,
h_bez VARCHAR(100) NULL,
PRIMARY KEY (h_id)
);
CREATE UNIQUE INDEX XPKHersteller
ON Hersteller
(
h_id
);
CREATE TABLE IF NOT EXISTS Supermarkt
(s_id INTEGER NOT NULL AUTO_INCREMENT,
s_name VARCHAR(50) NULL,
PRIMARY KEY (s_id)
);
CREATE UNIQUE INDEX XPKSupermarkt
ON Supermarkt
(
s_id
);
ALTER TABLE Artikel
ADD ( CONSTRAINT R_4 FOREIGN KEY (h_id)
REFERENCES Hersteller
ON DELETE RESTRICT )
;
ALTER TABLE Artikel_Supermarkt
ADD ( CONSTRAINT R_6 FOREIGN KEY (eh_id)
REFERENCES Einheit
ON DELETE RESTRICT )
;
ALTER TABLE Artikel_Supermarkt
ADD ( CONSTRAINT R_3 FOREIGN KEY (a_id)
REFERENCES Artikel
ON DELETE RESTRICT )
;
ALTER TABLE Artikel_Supermarkt
ADD ( CONSTRAINT R_2 FOREIGN KEY (s_id)
REFERENCES Supermarkt
ON DELETE RESTRICT )
;
...schaffe ich es, in den leeren Tabellen per INSERT zumindest in Artikel_Supermarkt oder Artikel Werte einzufügen, obwohl die PKs in Tabellen wie Artikel oder Supermarkt noch gar nicht vorhanden sind.
Zuerst dachte ich, dass keine FKs gesetzt sind, aber das Script läuft problemlos durch ohne Fehlermeldung.
Wieso können Werte eingefügt werden, obwohl es eigentlich solange nicht funktionieren dürfte bis, PKs in den anderen Tabellen außer der Zwischentabelle gesetzt wurden?
Danke,
Markus
Hallo,
...schaffe ich es, in den leeren Tabellen per INSERT zumindest in Artikel_Supermarkt oder Artikel Werte einzufügen, obwohl die PKs in Tabellen wie Artikel oder Supermarkt noch gar nicht vorhanden sind.
Wieso können Werte eingefügt werden, obwohl es eigentlich solange nicht funktionieren dürfte bis, PKs in den anderen Tabellen außer der Zwischentabelle gesetzt wurden?
vermutlich weil Du nicht InnoDB als Tabellenengine verwendet hast.
Leider geht dies aus Deinem Code nicht hervor. Foreign-Key-Constraints werden von MySQL derzeit nur bei InnoDB unterstützt.
Freundliche Grüße
Vinzenz
Hallo,
danke für die Info. Ich werde es heute Abend gleich ausprobieren.
Viele Grüße,
Markus
Hallo,
...hat funktioniert (nachdem ich auch die Syntax der Contraints anpassen musste).
Viele Grüße,
Markus