Liebe Mitlesende,
aus einer Datenbank (MySQL 5.1.41-community) möchte ich eine Person aus allen Tabellen austragen, die in der Datenbank eine Spalte mit "PersonenID" haben. In meinem Projekt verwende ich (absichtlich) keine foreign keys, sodass die DB nicht von selbst alle PersonenIDs aus ihren Tabellen putzt - und ich möchte das auch genau so haben, damit ich mit meinen Queries während des Entwickelns nicht noch mehr Fehlermeldungen bekomme.
Was ich schon kann:
* einen Datensatz aus einer Tabelle (hier "personen") löschen:
DELETE FROM `personen`
WHERE `PersonenID`='1234';
* alle Tabellen in Erfahrung bringen, in denen eine Spalte "PersonenID" existiert:
SELECT `TABLE_NAME`
FROM `information_schema`.`COLUMNS`
WHERE `TABLE_SCHEMA`='name_meiner_DB'
AND `COLUMN_NAME`='PersonenID';
* in der MySQL-Doku über die Syntax von DELETE und im hiesigen Archiv einen passenden Thread nachlesen, dass es eine Schreibweise für "multiple tables" gibt und wie sie aussehen sollte.
Folgende SQL-Query ist das bisherige Ergebnis meiner Bemühungen, die ohne Fehlermeldung vom MySQL-Server akzeptiert wird, aber leider keine tatsächlichen Löschungen vornimmt:
DELETE `benutzer`.*, `buchungen`.*, `dozenten`.*, `personen`.*
FROM `benutzer`, `buchungen`, `dozenten`, `personen`
WHERE `personen`.`PersonenID`='2';
Was ich noch nicht verstehe und deshalb auch noch nicht kann:
* Sind die im MySQL-Handbuch angeführten Joins unerlässlich, um das DELETE-Statement überhaupt mit dem erwünschten Effekt durchführen lassen zu können? Und wenn ja, warum muss ich da etwas joinen?
* Wie notiere ich die WHERE-Klausel, wenn ich die exakte Anzahl der betroffenen Tabellen nicht "kenne" (zumindest nicht innerhalb derselben SQL-Query)? In meinem PHP-Script speichere ich mit einer gesonderten Anfrage (siehe zweites SQL-Beispiel oben) die Namen der betroffenen Tabellen in einem Array, um dann den eben genannten DELETE per Script zusammenzusetzen...
* Ist mein Ansinnen überhaupt mittels einer einzigen SQL-Query lösbar, oder muss ich das tatsächlich doch "ausprogrammieren"?
Wer kann mir beim Verstehen weiterhelfen?
Liebe Grüße,
Felix Riesterer.
--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)