Freddy: DBI commit / AutoCommit und database transactions

hello

nochmals Freddy hier!
Das Modul DBI  kann diese Datenbank Sachen mit Perl und Mysql checken...
URL: http://search.cpan.org/~timb/DBI/DBI.pm

Das Modul verwende ich und geh grad die Doku step by step durch.
Is aber ned ganz klar alles.
Im speziellen der Teil mit dem commit und AutoCommit!

Also laut Doku muss ich commit verwenden,
damit das was ich mache auch wirklich in der DB gespeichert wird.
Meine Erfahrung zeigt jedoch, dass sobald ich das Perlscript im Browser
aufrufe das sofort in der DB als Änderung zu sehen ist in der mysql> konsole.

Ich laß dass AutoCommit generell gut sei und somit das einzelne commit wegfällt.
Also ok, dann halt AutoCommit beim Mysql Aufruf rein.

Erklären mir doch 4 Op's in einem mysql-IRC-channel
dass AutoCommit nur unter gewissen voraussetzungen geht,
und ich aufpassen soll was so «Transaktionen» angelangt.
k.A. was für Transaktionen und was die machen können.

Aus der Doku werd ich ja auch ned schlau.
Auf jeden fall weiß ich ohnedies nicht wofür das commit gut sein soll,
weil hier die änderungen eben eh immer irgendwie gespeichert werden.

Freundliche Grüße
Freddy

  1. Hallo,

    in deinem Posting steckt keine einzige Frage,
    was möchtest du wissen?

    gruss

    --
    no strict;
    no warnings;
    awesome, awesome to the max
    1. Hallo Eternius,

      warum sagen alle ich brauch commit wenns perl doch auch ohne commit speichert?

      was hat es auf sich mit diesen database transactions vor denen mich irgendwie alle warnen in bezug auf commit (da soll ich aufpassen auf angeblich)

      wie oft muss ich commit nehmen?

      wie geht das mit commit?

      ist mir einfach unklar auch diese Gefahr mit den DB transactions

      /me danke
      Freddy

      1. Hallo,

        http://de.wikipedia.org/wiki/Transaktion_(Informatik)

        Transaktionen definiert man sich selbst:
        z.b. eine Überweisung

        Transaktion beginnt

        • gibt es das konto des überweisers
        • kontostand des überweiser prüfen
        • gibt es das konto des empfängers
        • geld abbuchen
        • geld aufbuchen
          transaktion endet

        commit wird nur ausgeführt, oder solltest du nur ausführen, wenn alle! teilschritte erfolgreich waren, ansonsten rollback.

        wenn du keine selbstdefinierten Abläufe wie den obengenannten verwendest, sondern einfach immer nur ein paar werte holst, oder schreibst (gästebuch...), dann benutz AutoCommit.

        gruss

        --
        no strict;
        no warnings;
        awesome, awesome to the max
        1. Hallo

          ja aber mein mysql scheint automatisch zu commit'en weil
          es immer alles gleich in die DB schreibt sobald ein execute() kommt...

          Oder sehe ich das falsch?

          Spezial-Frage:
          wenn ich AutoCommit auf 0 (null) setze,
          und ich selber -> commit anmwenden muss,
          wie oft muss ich das machen?

          immer   prepare,  execute,  commit,  disconnect ??
          Ist das statementhandle $sth kaputt nach commit?

          Ändert sich durch mich bei commit etwas?
          wie gesagt im moment scheint es auch bei execute immer gleich die DB zu schreiben.
          Oder würde es das ohne commit auch?
          ich hab aber kein commit extra definiert

          /me Danke
          Freddy

  2. use Mosche;

    Dein gesamter Text ist sprachlich sehr schwer zu verstehen.

    Das Modul verwende ich und geh grad die Doku step by step durch.
    Is aber ned ganz klar alles.
    Im speziellen der Teil mit dem commit und AutoCommit!

    Standardmäßig ist AutoCommit aktiviert. Du musst also nicht nach jeder schreibenden Operation einen commit()-Aufruf durchführen. Wenn du allerdings AutoCommit auf '0' setzt, dann ist dies nötig, wenn du eine Transaktion abschließen willst. Ein Beispiel für eine Transaktion wurde dir bereits genannt.

    use Tschoe qw(Matti);

    --
    Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
    Webapplikationen in C++ entwickeln
    1. Hallo matii

      Standardmäßig ist AutoCommit aktiviert.

      Darf ich fragen wo Du diese Information her hast?
      Ich hab gesucht und gesucht und fand das nirgends...

      Freundliche dankende Grüße,
      Freddy

      1. Hallo Freddy,

        Darf ich fragen wo Du diese Information her hast?
        Ich hab gesucht und gesucht und fand das nirgends...

        In der Doku zu DBI:
        http://search.cpan.org/~timb/DBI-1.47/DBI.pm
        The AutoCommit and PrintError attributes for each connection default to "on"

        ...oder direkt im Quelltext ;)

        Gruß
        Helmut Weber

        --
        -------------------------------------------
        Mode ist eine Variable, Stil eine Konstante
      2. use Mosche;

        Hallo matii

        Standardmäßig ist AutoCommit aktiviert.

        Darf ich fragen wo Du diese Information her hast?
        Ich hab gesucht und gesucht und fand das nirgends...

        Wie bereits gesagt: Man findet es bspw. in der entsprechenden Perl-Doku.
        Ich habe es aus meinem Buch "Programmierung mit Perl DBI". Direkt drunter steht der Hinweis, man möge AutoCommit immer explizit angeben, da zukünftige Versionen von DBI "sehr wahrscheinlich" eine Warnung ausgeben, wenn man dies unterlässt.

        use Tschoe qw(Matti);

        --
        Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
        Webapplikationen in C++ entwickeln