mySQL: Datensätze auf einmal in zwei Tabellen löschen
Pierre
- datenbank
Schönen Abend
Könnt ihr mir bei meinem kleinen mySQL Problem helfen?
Ich möchte gerne den DELETE Befehl über zwei Tabellen anwenden, weiss aber nicht, wie das hier funzt. Das einfache Löschen ist kein Problem:
DELETE FROM news WHERE id=6
Ich möchte aber gleichzeitig auch alle Datensätze der verknüpften Tabelle "bilder" löschen, bei der der Feldwert "newsId" ebenfalls die "6" ist. Geht das in einer Abfrage, oder muss ich hier zwei separate Aufrufe machen?
Besten Dank für eure Tipps
Pierre
Hallo,
mach es doch in 2 Abfragen
DELETE FROM news WHERE id=6
DELETE FROM bilder WHERE newsid=6
Geht doch genauso schnell, und man ´muss vorher nicht überlegen, wie man das in 1 Abfrage macht ;)
MFG
Andavos
Hello,
DELETE FROM news WHERE id=6
DELETE FROM bilder WHERE newsid=6Geht doch genauso schnell, und man ´muss vorher nicht überlegen, wie man das in 1 Abfrage macht ;)
Das ist nicht ganz richtig. Es dauert garantiert länger, als wenn es in einer Abfrage ginge. Das kann MySQL aber (noch) nicht.
Allerdings sollte man überlegen, ob ein Programm, das hier Datensätze löscht, die voneinander abhängig sind, evetuell auch eine Sperre setzen muss solange. Das nützt aber nur etwas, wenn alle anderen Zugriffsfunktionen auf dieselbe DB das auch berücksichtigen.
Es könnten sonst schon Inkonsistenzen entstehen.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo,
Das ist nicht ganz richtig. Es dauert garantiert länger, als wenn es in einer Abfrage ginge. Das kann MySQL aber (noch) nicht.
Gut das es länger dauert ist mir auch klar, aber der Unterschied kann nur minimal sein.
MFG
Andavos
Besten Dank
vielleicht bietet ja die DB Klasse aus der PEAR Bibliothek auch hierfür einen Befehl. Beim Insert ist je die Funktion nextID() auch ganz hilfreich. Hier wird die Tabelle ja auch gesperrt.
Oder weiss jemand gleich Bescheid, ob DB was bietet?
Schönen Gruss
Pierre
yo,
Das ist nicht ganz richtig. Es dauert garantiert länger, als wenn es in einer Abfrage ginge. Das kann MySQL aber (noch) nicht.
in dem falle ist zu überlegen, ob es nicht doch zu vernachlässigen ist, da es sich erstens um zwei Tabellen handelt und nicht um eine, in der zweimal gelöscht wird und zum anderen wie weiter unter das dbms die transaktionen (falls benutzt) wohl optimiert. ich würde das einfach mal nachmessen. könnte keine verbindliche aussage treffen.
Allerdings sollte man überlegen, ob ein Programm, das hier Datensätze löscht, die voneinander abhängig sind, evetuell auch eine Sperre setzen muss solange. Das nützt aber nur etwas, wenn alle anderen Zugriffsfunktionen auf dieselbe DB das auch berücksichtigen.
das macht man am besten mit transaktionen, die genau dafür konzepiert wurden. mysql unterstützt dies, man muss nur das auto-commit ausschalten. durch die undo-elemente wird ausserdem die lesekonsitenz für andere benutzer sichergestellt.
Ilja
Hallo,
Ich möchte gerne den DELETE Befehl über zwei Tabellen anwenden, weiss aber nicht, wie das hier funzt.
Lies mal im Manual nach:
http://www.mysql.com/doc/en/DELETE.html
http://www.mysql.com/doc/de/DELETE.html
Offenbar ist es ab MySQL 4.0.0 moeglich, mit
einem DELETE-Statement Werte aus mehreren Tabellen
zu loeschen.
Falls Du eine genug aktuelle MySQL Version hast
und mit der Syntax nicht klarkommst, darfst Du
hier nochmal nachfragen. ;-)
Gruesse,
Thomas