f3nnek Geschrieben 15. Mai 2020 Teilen Geschrieben 15. Mai 2020 Hallo! kurze frage, habe es nicht so ganz kapiert. Wieso wird bzw. gibt es den Befehl start transaction? Was würde es den für einen Unterschied geben, wenn man das nur auf der Festplatte ändert? Performance? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Whiz-zarD Geschrieben 15. Mai 2020 Teilen Geschrieben 15. Mai 2020 (bearbeitet) Eine Transaktion ist eine Art Tagebuch. In einer Transaktion werden alle Änderungen an der Datenbank protokolliert und falls ein Fehler auftreten sollte, der zu einer Inkonsistenz der Daten führt, lassen sich alle Änderungen wieder rückgängig machen, um wieder auf den Ursprungspunkt zurückzukehren. Angenommen du hast folgende Tabelle: ARTIKEL ------------------------ ARTIKEL_ID NUMBER(10) BEZEICHNUNG VARCHAR(10) ANZAHL NUMBER(10) PREIS NUMBER(5,2) Und jemand will folgende Zeilen in die Tabelle schreiben: ARTIKEL_ID BEZEICHNUNG ANZAHL PREISE 1 Füller 100 1,99 2 Bleistift 123 0,59 3 Federtasche 50 7,99 Dies würde dann zu einem Fehler führen, weil der Begriff "Federtasche" 11 Zeichen besitzt aber die Spalte nur 10 Zeichen umfassen kann. Damit hätten wir einen inkonsistenten Zustand, weil wir die ersten beiden Artikel in die Tabelle schreiben könnten aber den dritten nicht. Mit einer Transaktion könnten wir alles wieder rückgängig machen und die Tabelle wieder so hinterlassen, wie sie vorher war (ein sog. Rollback) und der Fehler wird gemeldet. Die Daten können dann korrigiert werden und das ganze noch mal versuchen. Ein weiterer Vorteil von Transaktionen ist, dass die Daten erst geschrieben werden, wenn man das OK gibt. Also ein Commit ausführt. Angenommen, es greifen mehrere Leute gleichzeitig auf die Datenbank und man will viele Änderungen ausführen. Wenn dann die anderen die Daten währenddessen lesen und wir würden sofort jede Änderung wegschreiben, dann könnten die anderen ggf. einen inkonsistenten Stand lesen, was dann zu Fehlern führen kann. Erst, wenn wir dann das OK geben, können dann die anderen die neuen Daten lesen. Und weil die Daten erst geschrieben werden, wenn man das OK gibt, haben wir auch einen Performance-Vorteil, weil das Schreiben der Daten ein sehr teurer Prozess ist, da die Daten auf die Festplatte geschrieben werden aber die Performance ist zweitrangig. Vordergründig geht es um die Konsistenz der Daten. Mit START TRANSACTION startest du halt eine Transaktion und mit COMMIT oder ROLLBACK beendest du sie wieder. Bei COMMIT werden dann die Daten weggeschrieben und mit ROLLBACK wieder rückgängig gemacht. Bearbeitet 15. Mai 2020 von Whiz-zarD Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 MartinSt Geschrieben 15. Mai 2020 Teilen Geschrieben 15. Mai 2020 ... und richtig geile DBs können sogar Strukturänderungen in Transaktionen. Wenn du im obigen Beispiel bei einem Update der Applikation die Preise in eine eigene Tabelle auslagern willst, dann legst du die neue Tabelle mit Spalte "Preis" an, kopierst die Preise von der einen in die andere Tabelle und löscht anschließend die Preisspalte in der ersten Tabelle. Das alles in einer Transaktion stellt sicher, dass du immer einen konsistenten Stand hast, egal ob dein Update der Applikation vielleicht scheitert. Es gibt nur alt oder neu, aber nichts dazwischen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 f3nnek Geschrieben 15. Mai 2020 Autor Teilen Geschrieben 15. Mai 2020 ok super danke für die schnelle Antwort. Habe hier Xampp mit Mariadb. Wenn ich da jetzt create table ausführe und insert into, dann sind die Commands doch auch nur im Ram oder? THX Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Whiz-zarD Geschrieben 15. Mai 2020 Teilen Geschrieben 15. Mai 2020 Wenn du keine Transaktion startest ist das dann ein Auto-Commit. Sprich, die Änderungen werden sofort geschrieben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Frage
f3nnek
Hallo!
kurze frage, habe es nicht so ganz kapiert. Wieso wird bzw. gibt es den Befehl start transaction? Was würde es den für einen Unterschied geben, wenn man das nur auf der Festplatte ändert? Performance?
Link zu diesem Kommentar
Auf anderen Seiten teilen
4 Antworten auf diese Frage
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.