Mysql und transaktionen

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

  • Mysql und transaktionen

    hallo,

    ich beschäftige mich gerade mit den transaktionen bei mysql(innoDB).
    leider liefert die suche (google und hier) nicht viel brauchbares.

    Kennt jemand ein tutorial oder so, wo transaktionen genau erklärt werden?

    myisam in mysql 4 unterstützt ja keine transaktionen, wie schaut es den in Mysql 5 aus?
    .....Ansonstens kann MySQL 5.0 auch mit MyIsam Tabellen Transaktionsüberwachte Befehle abarbeiten.....
    ich konnte im manual leider nichts finden.


    mfg Roland
    Onlie Browsergame: http://www.war-of-empire.de <-- 2. Weltkrieg

  • #2
    Transaktionen werden im MySQL-Handbuch beschrieben.

    Viel zu erklären gibt's da nicht. Es gibt zwei Möglichkeiten: setzt man "AUTOCOMMIT" auf 0, arbeitet man automatisch mit Transaktionen. Alle Änderungen werden nicht ausgeführt, bis ein explizites "COMMIT" kommt.

    Beispiel:

    set autocommit=0;
    update ...
    update ...
    update ...
    select <- zeigt den alten Zustand an, weil noch kein commit
    commit;
    select <- jetzt erst sind die Änderungen sichtbar

    Zweite Möglichkeit, man kann für einen Block von Anweisungen autocommit deaktivieren.

    Beispiel:

    start transaction <- Beginn der Transaktion
    update ...
    update ...
    update ...
    commit <- Ende der Transaktion
    update ... <- wird sofort ausgeführt und wartet nicht auf commit

    ROLLBACK versetzt eine Tabelle in den Zustand vor der Transaktion zurück.

    start transaction
    delete ...
    delete ...
    delete ... <- angenommen hier tritt ein Fehler auf
    rollback <- Änderungen werden rückgängig gemacht
    select ... <- alle Einträge sind noch da
    delete ... <- Vorsicht! DAS kann man nicht mehr rückgängig machen, weil außerhalb einer Transaktion.

    BTW: Es wäre natürlich mal eine geniale Sache wenn jemand sich die Mühe machen würde, das Verhalten einer Transaktion in MySQL für myisam mit PHP zu simulieren.

    Also Tabelle sperren, Backup ziehen und Log der Transaktion schreiben. Bei Erfolg Log verwerfen, bei Mißerfolg den Tabelleninhalt aus dem Log wiederherstellen. Danach Sperre wieder aufheben und Ergebnis der Transaktion in Log-File ausgeben.

    Das wäre zwar alles andere als performant, aber falls man aus welchen Gründen auch immer MySQL mit Myisam verwenden MUSS, dann hätte man zumindest eine Notlösung für die seltenen Fälle in denen man auf eine Transaktion angewiesen ist. Meistens sind das ja irgendwelche Updates über mehrere Tabellen.
    Zuletzt geändert von Marcusson; 26.02.2006, 12:15.

    Kommentar

    Lädt...
    X