2 insert queries wie transaktionen ablaufen lassen - Prinzip : ganz oder garnicht

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

  • 2 insert queries wie transaktionen ablaufen lassen - Prinzip : ganz oder garnicht

    Hey..
    ich möchte 2 Insert Query machen..dabei soll die 1. rückgängig gemacht werden wenn die 2. fehlschlägt..

    Wie mache ich das ?

    Bsp.:
    1. INSERT INTO table1 VALUES (test)
    2. INSERT INTO table2 VALUES (test)

    Bei der zweiten Meldung ist 'test' bereits vorhanden..die spalte ist unique..und jetzt soll test auch aus der 1. Tabelle gelöscht werden.

  • #2
    hmm,

    vor dem INSERT kannst du mit einem SELECT prüfen ob test schon in der tab2 existiert, ist die der fall brauchst du beide INSERTS nicht.

    Ansonsten kannst du natürlich auch schaun ob der zweite Query mit erfolg beendet wird. Kommt ein Fehler zurück dann kannst du auch die Nr. eins wieder löschen.




    Kommentar


    • #3
      Aber das Löschen muss ich dann 'manuell' (mit php) machen oder ?
      Dafür gibt es nicht zufällig einen SQL Befehl ?

      Wäre ja nicht sonderlich schwierig..aber ich will alles lieber den datenbank überlassen.

      Kommentar


      • #4
        mysql_query("delete from tabelle where bla='blub' ");
        h.a.n.d.
        Schmalle

        http://impressed.by
        http://blog.schmalenberger.it



        Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
        ... nur ohne :-)

        Kommentar


        • #5
          mysql_query(query1);
          mysql_query(query2) or mysql_query("delete from tabelle where bla='blub' ") or die "Fuck..nichts geht ";

          Jep..also keine MySQL Lösung

          Kommentar


          • #6
            Das letzte Problem das bleibt, ist wenn das Skript abbricht (zB weil der Webserver abstürzt), bevor die 2. Query abgeschickt wird.
            mein Sport: mein Frühstück: meine Arbeit:

            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

            Kommentar


            • #7
              hmm,

              das Problem ist das MySQL Transaktionen nur in geringem Maße unterstützt, bei sowas bietet sich dann eher Postgres an, es kommt halt darauf an wie zuverläsig es sein muss !

              Kommentar


              • #8
                Re: hmm,

                $anfrage ="INSERT INTO table1 VALUES (test)";
                If ($ergebnis=mysql_query($anfrage)) {
                $anfrage2 ="INSERT INTO table2 VALUES (test)";
                If ($ergebnis2 = mysql_query($anfrage2)) {
                echo "beide Datensätze eingetragen";
                } Else {
                mysql_query("delete from tabelle1 where bla='blub' ");
                echo "eintrag fehlgeschlagen";
                }
                } Else {
                echo "Fehler=".mysql_error();
                }


                Wenn es funktioniert sag mal bescheid.

                [Editiert von paddy am 06-01-2002 um 10:43]

                Kommentar


                • #9
                  @paddy Das ist genau der Code den ich oben geschrieben habe..
                  Das mit dem 'or' ist ein kleiner Trick. Und zwar wertet PhP bei OR anweisungen erst den linken Teil aus. Wenn dieser bereits true ergibt ignoriert PhP den rechten Teil weil die Bedingung eh schon erfüllt ist. Er gibt der linke Teil false so wird auch der rechte ausgewertet und das script bricht mit 'die' ab..
                  =>
                  if(check($test)) { blah } else die "Fehler"; bewirkt dasselbe wie :
                  check($test) || die "Fehler";

                  Die die Funktion liefert bei erfolgreicher Ausführung ein true (1) zurück. 'ECHO' tut das allerdings nicht..dafür aber viele andere Funktionen.

                  @alle Gerade wegen dem Absturz wollte ich das ja der Datenbank überlassen. Konnte ja nicht wissen dass MySQL nicht alles erfüllt was wir in DB I gelernt haben. Theoretisch kann ich das ja selber programmieren..allerdings wäre das ein etwas zu hoher Aufwand.
                  Ich habe die Daten auch nur in 2 Tabellen aufgeteilt weil ich 2 Timestamp benutze. Wenn dass alles passiert hat halt man ein User nur Logindaten und keine Userdaten.

                  Kommentar

                  Lädt...
                  X