Pierre: mySQL: Datensätze auf einmal in zwei Tabellen löschen

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

  1. 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

    --
    http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
    1. Hello,

      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 ;)

      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

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      1. 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

        --
        http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
        1. 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

      2. 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

  2. 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

    --
    Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
    Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
    Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/