Fragen/Probleme: FOREIGN KEY und MySQL

Hallo zusammen,

ich bräuchte mal ein wenig Hilfe von den SQL-Erfahrenen unter euch.
Ich habe heute ein Buch über SQL gekauft (das hier), und mich gleich mal mit den Fremdschlüsseln beschaäftigt.

Wenn ich das Buch richtig verstehe, bewirkt ein Fremndschlüssel, dass sobald der Wert des Referenzschlüssels geändert oder gelöscht wird, auch der Wert von dem Fremdschlüssel in der anderen Tabelle geändert wird, um die referenzielle Intergrität zu bewahren.

Ich habe nun 3 Tabellen, produkte, kunden und bestellungen.
Die Tabelle bestellungen sieht so aus:

CREATE TABLE bestellungen(
bst_id INT( 5 ) NOT NULL AUTO_INCREMENT ,
kdn_id INT( 5 ) NOT NULL DEFAULT 0,
pdct_id INT( 5 ) NOT NULL ,
PRIMARY KEY ( bst_id ) ,
FOREIGN KEY ( kdn_id ) REFERENCES kunden( kdn_id ) ON UPDATE CASCADE ON DELETE SET DEFAULT,
FOREIGN KEY ( pdct_id ) REFERENCES produkte( pdct_id ) ON UPDATE CASCADE ON DELETE CASCADE
)

Die komplette DB findet ihr hier:
jw-lighting.xe.cx/files/sql_workstation.sql

Ihc habe mir 10 Produkte angelegt, 5 Kunden und dann 5 Bestellungen.
Wenn ich aber nun das Produkt mit ID 9 lösche, wird nicht - wie ich es jetzt erwartet hätte - automatisch die Bestellung gelöscht.

Woran liegt das? Habe ich das Prinzip falsch verstanden, oder unterstützt MySQL das einfach nicht?
Habe ich irgendwo einen Fehler?

Wäre für schnelle Hilfe dankbar.

Grüße:
jw-lighting

“Schnelle” Hilfe gibt das Handbuch.

CREATE TABLE Syntax

[quote]InnoDB tables support checking of foreign key constraints. […]

For other storage engines, MySQL Server parses and ignores the FOREIGN KEY and REFERENCES syntax in CREATE TABLE statements.[/quote]

Chapter 13. Storage Engines

Heisst auf deutsch, das MySQL das schlicht nicht unterstützt, bzw. nur, wenn man InnoDB als Engine benutzt??

Wie siehts mit PostGre SQL aus? unterstützt das FOREIGN KEY?.

PS: Im Buch stand, das das von MySQL unterstützt wird, aber, so wörtlich „nicht bei allen Tabellentypen“. Mit Tabellentypen sind dann also die StorageEngines gemeint?
EDIT: Ja, sind sie !haue

Danke soweit schonmal…

EDIT: Kann ich den Typ einer tabelle den einfach Konvertieren, oder geht mir dabei die Tabelle flöten? Und: Kann ich InnoDB irgendwie als Standart festlegen?

:stress:

13.3. Setting the Storage Engine

danke, ich bin zur Zeit etwas suchfaul… o.0 !coffee :unamused:

Leider habe ich festgestellt, das INNODB unter MySQL Fremdschlüssel zwar unterstützt, aber nur begrenzt. Er überwacht dann nur, das man nix löschen oder ändern kann, was zu Inkonsitenz führt. Aotomatische Aktionen, die zb. von FireBird unterstützt werden gehn leider nicht - schade, für ein so bekanntes und oft benutztes DB-System. :stress:

Ich mahce mich jetzt mal auf die Suche in der PgSQL-Man, in der Hoffnung, dort was brauchbares vorzufinden.

Und habe was gefunden, juhu: postgresql.org/docs/8.4/inte … TRAINTS-FK

und es kommt noch besser: Sogar SQLite unterstützt FOREIGN KEYs:

sqlite.org/syntaxdiagrams.ht … key-clause

EDIT: Zumindest steht in der Doc nichts negatives von wegen nur parsen oder so.
Im praxistest arbeitet es allerdings noch nicht so, wie ich es gerne hätte… :stress: :stress: :neutral_face: :susp:

Postgres ist genial :wink: