Mehrere DELETE-Statements in einem Query-String

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Wenn du Transaktionen benötigst: Stell um! Nicht lang schnacken, fertig werden

    Kommentar


    • #17
      Machen die Transaktionen nicht eigentlich nicht viel mehr, als der Reihe nach mehrere Queries auszuführen, und dabei die betroffenen Tabellen zu locken ?

      Sowas könnte man sih doch auch selber schreiben. Oder ich hab den Sinn von Transaktionen noch nich verstanden. :>
      Mein aktuelles Projekt: Hausaufgaben Datenbank für kostenlose Hausaufgaben

      Kommentar


      • #18
        Original geschrieben von nohfreak
        Machen die Transaktionen nicht eigentlich nicht viel mehr, als der Reihe nach mehrere Queries auszuführen, und dabei die betroffenen Tabellen zu locken ?
        Das ist nur ein Teil. Falls innerhalb der Transaktion etwas fehlschlägt, kann man mit ROLLBACK [WORK] alle Aktionen auf der DB seit Beginn der Transaktion rückgängig machen. Das macht z.B. Sinn, wenn du aus einer Artikel-Tabelle einen Artikel löschen willst, aber aus irgendeinem Grunde die Bestellungen für diesen Artikel nicht löschen kannst.
        Oder wenn du innerhalb einer Transaktion 99 Records löscht, der 100. aber fehlschlägt, kannst du die 99 Löschungen mit einem Schlag rückgängig machen.
        Wenn alles ok ist, machst du die Änderungen mit COMMIT [WORK] definitiv.
        Oder das Beispiel von neophyt:
        Da wird ein Mitarbeiter aus einer MA-Tabelle, die zu diesem MA gehörenden Einträge in einer Code-Tabelle und die von diesen Codes abhängigen Inhalte gelöscht (in umgekehrter Reihenfolge). Es macht Sinn, entweder alle diese Aktionen, oder keine durchzuführen
        Zuletzt geändert von H2O; 27.02.2008, 12:25.
        Gruss
        H2O

        Kommentar


        • #19
          Hrm. Okay, verdammt. Der Rollback funktioniert tatsächlich nich mit MyISAM.

          Ich habs mal wie folgt getestet:

          PHP-Code:
          <?php

          try {
              
          $dbh -> beginTransaction();
              
          $dbh -> exec("INSERT INTO accounts(name) VALUES('Klaus')");
              
          $dbh -> exec("INSERT INTO accounts(name) VALUES('Klaus2')");
              
          $dbh -> exec("INSERT INTO accounts(name) VALUES('Klaus3')");
              
          $dbh -> commit();
              } catch(
          Exception $e) {
                              
          $dbh->rollback();
                              echo 
          "Failed:" $e -> getMessage();
                  }
          ?>
          Damit kommen zwar alle Werte in die DB rein. Ändere ich nun aber z.B. bei Statement 2 "accounts" zu "account", dann kommen nur die Werte "Klaus" und "Klaus 3" in die DB rein, es findet aber kein Rollback statt, obwohl Statement 2 fehlerhaft wr. :>

          Schade. :>
          Mein aktuelles Projekt: Hausaufgaben Datenbank für kostenlose Hausaufgaben

          Kommentar


          • #20
            Nur Schade, das noch keiner gesagt hat, das MyISAM keine Transaktionen unterstützt, dann hättest du dir das sparen können.

            </ironie>

            Kommentar


            • #21
              Jaja, ich weiß, ich weiß. Ich wollts trotzdem mal probieren wie weit das funktioniert. Also obs garnich geht ode rnur er Rollback nich tut.

              Was für Vor- Nachteile bringt denn eine Umstellung auf z.B. InnoDB ?
              Mein aktuelles Projekt: Hausaufgaben Datenbank für kostenlose Hausaufgaben

              Kommentar


              • #22
                Original geschrieben von nohfreak
                Was für Vor- Nachteile bringt denn eine Umstellung auf z.B. InnoDB ?
                Keine Full-Text Indizes
                Gruss
                H2O

                Kommentar


                • #23
                  Was für Vor- Nachteile bringt denn eine Umstellung auf z.B. InnoDB ?
                  Transaktionen und Fremdschlüsselconstraints.

                  Kommentar

                  Lädt...
                  X