MYSQL: DELETE über mehrere Tabellen

Hallo Leute,

ich habe folgendes Problem:

Ich habe einen Datenbank mit drei Tabellen (PLAN, KURSE, TERMINE). Ein PLAN hat verschiedenen Kurse und die Kurse haben wiederum verschiedene TERMINE.

Wenn nun ein PLAN gelöscht werden soll, dann sollen die dazugehörigen KURSE und TERMINE auch gelöscht werden. Das SQL-Statement sieht meiner Meinung nach so aus:

DELETE
t, k, p
FROM
termine t, kurse k, plan p
WHERE
t.kurs=k.kurs_id AND k.plan=p.plan_id AND plan_id=‚21‘

Theoretisch müssten nun 83 Zeilen (PLAN=1; KURSE=22; TERMINE=60) gelöscht werden. Der „MYSQL Query Browser“ zweigt mir auch an, dass 83 Zeilen bearbeitet wurden. Wenn ich das Ergebnis dann aber in den Tabellen nach schaue, dann wurden die Zeilen nur aus PLAN und KURSE gelöscht nicht aber aus TERMINE. Was dann heißen würde, das nur 23 Zeilen angefasst wurden.

Hoffe es kann mir jemand einen Tipp für dieses Merkwürdige Verhalten geben.

Danke im Voraus.
HSKonnection

Hmm, welchen Tabellentyp haben die Tabellen? Soweit ich weiß, kann es bei InnoDB-Tabellen zu merkwürdigem Verhalten kommen, wenn der MySQL-Optimizer die Abfrage umstellt.

Bei InnoDB sollte ein
DELETE FROM plan WHERE plan_id=‚21‘
ausreichen, sofern die Fremdschlüssel mit einem ON DELETE CASCADE definiert wurden. Dann werden auch alle zugehörigen Kurs- und Termine-Datensätze gelöscht.

peter.