SQL-Transaktionen und ACID erklärt: COMMIT, ROLLBACK und Isolationsstufen

  1. Startseite
  2. Blog
  3. Datenbanken und SQL

Datenbanken und SQL

SQL-Transaktionen und ACID erklärt: COMMIT, ROLLBACK und Isolationsstufen

Was passiert, wenn der Server während des Geldtransfers zwischen zwei Konten ausfällt? Transaktionen sind die Antwort. Sehen Sie, wie sie an einem realen Beispiel funktionieren, was ACID bedeutet und wie Sie eine Isolationsstufe auswählen.

9 Min. Lesezeit
SQL-Transaktionen und ACID erklärt: COMMIT, ROLLBACK und Isolationsstufen

Das Wichtigste

  • Eine Transaktion gruppiert Anweisungen so, dass sie alle gemeinsam erfolgreich sind oder alle gemeinsam fehlschlagen.
  • COMMIT macht die Änderungen dauerhaft und ROLLBACK macht sie rückgängig.
  • ACID steht für Atomizität, Konsistenz, Isolation und Haltbarkeit.
  • Eine stärkere Isolierung verhindert mehr Anomalien, kann jedoch die Parallelität verringern. Wählen Sie sie daher bewusst aus.

Für den Transfer von 300 Rupien von Asha zu Ben sind zwei Aktualisierungen erforderlich: von einem Konto abziehen und zum anderen addieren. Wenn das System zwischen ihnen zusammenbricht, verschwindet das Geld. SQL-Transaktionen machen dies unmöglich, indem beide Schritte als eine Einheit behandelt werden.

In diesem Leitfaden gehen wir Commits, Rollbacks und Fehler in einer kleinen Kontentabelle durch. Wir haben diese Beispiele in SQLite ausgeführt und die angezeigten Salden stammen aus diesem Durchlauf. Die grundlegenden Befehle sind in allen Datenbanken ähnlich, das Sperr- und Isolationsverhalten variiert jedoch stark. Daher weisen wir Sie darauf hin, wo Sie die Dokumentation Ihrer eigenen Datenbank nachschlagen können.

Was ist eine Transaktion?

Eine Transaktion ist eine Folge einer oder mehrerer SQL-Anweisungen, die von der Datenbank als eine einzige logische Operation behandelt werden. Hier ist unsere Tabelle:

CREATE TABLE accounts (
  id INT PRIMARY KEY,
  owner TEXT,
  balance INT CHECK (balance >= 0)
);

INSERT INTO accounts VALUES (1, 'Asha', 1000), (2, 'Ben', 200);

Die CHECK-Einschränkung ist eine Regel, die besagt, dass ein Saldo niemals unter Null fallen kann, die wir später verwenden werden. Beachten Sie, dass die Syntax zum Starten einer Transaktion unterschiedlich ist: SQLite und PostgreSQL akzeptieren BEGIN, MySQL verfügt auch über START TRANSACTION und SQL Server verwendet BEGIN TRANSACTION.

Außerhalb einer expliziten Transaktion verwenden die meisten Datenbanken Autocommit, wobei jede Anweisung gespeichert wird, sobald sie abgeschlossen ist. Oracle ist eine bemerkenswerte Ausnahme, da eine Sitzung dort in einer Transaktion verbleibt, bis Sie einen Commit durchführen.

COMMIT: Machen Sie es dauerhaft

BEGIN;
UPDATE accounts SET balance = balance - 300 WHERE id = 1;
UPDATE accounts SET balance = balance + 300 WHERE id = 2;
COMMIT;

-- Asha | 700
-- Ben  | 500

Bis zur Ausführung von COMMIT sind die Änderungen vorläufig. Nach erfolgreicher Rückkehr garantiert die Datenbank, dass sie gespeichert werden. Die Summe beider Konten blieb bei 1200, und das ist der springende Punkt der Übung.

ROLLBACK: Alles abbrechen

ROLLBACK macht alles seit Beginn der Transaktion rückgängig:

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
SELECT owner, balance FROM accounts;
-- Asha | 600   (visible inside this transaction)
-- Ben  | 500

ROLLBACK;
SELECT owner, balance FROM accounts;
-- Asha | 700   (back to where it was)
-- Ben  | 500

Ein Rollback erfolgt auch automatisch, wenn die Verbindung unterbrochen wird oder der Server abstürzt, bevor Sie einen Commit durchführen, sodass eine halbfertige Transaktion nicht überlebt.

Wenn eine Anweisung fehlschlägt

Hier ist ein realistischerer Fall. Asha versucht, 5000 zu senden, die auf dem Konto nicht vorhanden sind. Die Gutschrift an Ben erfolgt zuerst und dann erfolgt die Belastung, was gegen die CHECK-Regel verstößt:

BEGIN;
UPDATE accounts SET balance = balance + 5000 WHERE id = 2;
UPDATE accounts SET balance = balance - 5000 WHERE id = 1;
-- error: CHECK constraint failed: balance >= 0

ROLLBACK;

-- Asha | 700
-- Ben  | 500

Ohne die Transaktion hätte Ben die 5000 behalten und die Bücher wären falsch. Beachten Sie ein wichtiges Detail: Eine fehlgeschlagene Anweisung bricht die Transaktion nicht immer von selbst ab. In SQLite und MySQL können beispielsweise frühere Anweisungen ausstehend bleiben, sodass Ihr Code das Rollback durchführen muss. PostgreSQL markiert stattdessen die gesamte Transaktion als abgebrochen und lehnt weitere Anweisungen ab, bis Sie ein Rollback durchführen.

Koppeln Sie im Anwendungscode immer die Transaktion mit der Fehlerbehandlung. Hier ist die Idee in Python, und unser Leitfaden zur Python-Ausnahmebehandlung erklärt die Syntax:

try:
    conn.execute("BEGIN")
    conn.execute(debit_sql, values)
    conn.execute(credit_sql, values)
    conn.execute("COMMIT")
except Exception:
    conn.execute("ROLLBACK")
    raise

Speicherpunkte

Ein Sicherungspunkt markiert eine Position innerhalb einer Transaktion, sodass Sie nur einen Teil der Arbeit rückgängig machen können:

BEGIN;
UPDATE accounts SET balance = balance - 50 WHERE id = 1;
SAVEPOINT bonus;
UPDATE accounts SET balance = balance + 999 WHERE id = 2;
ROLLBACK TO bonus;
UPDATE accounts SET balance = balance + 50 WHERE id = 2;
COMMIT;

-- Asha | 650
-- Ben  | 550

Der 999-Bonus wurde rückgängig gemacht, während der Rest der Transaktion weitergeführt und festgeschrieben wurde. Dies ist nützlich für optionale Schritte in einem langen Prozess.

ACID-Eigenschaften erklärt

Eigentum Versprechen In unserem Transfer
Atomarität Alles oder nichts Beide Updates finden statt, oder keines von beiden
Konsistenz Die Regeln gelten auch danach noch Kein Gleichgewicht kann die CHECK-Regel brechen
Isolation Gleichzeitiges Arbeiten stört nicht Andere sehen keinen halbfertigen Transfer
Haltbarkeit Festgeschriebene Daten überstehen einen Fehler Ein Stromausfall nach COMMIT geht nichts verloren

Konsistenz wird häufig missverstanden. Die Datenbank erzwingt nur die von Ihnen deklarierten Regeln, wie z. B. Einschränkungen und Fremdschlüssel. Es verhindert nicht, dass Ihr Code den falschen Betrag überweist. Haltbarkeit wird normalerweise mit einem Write-Ahead-Protokoll erreicht, bei dem Änderungen sicher auf der Festplatte aufgezeichnet werden, bevor der Commit bestätigt wird.

Was passiert bei gleichzeitigen Transaktionen?

Wir haben zwei Verbindungen zu einer SQLite-Datei geöffnet. Der erste hat eine Transaktion gestartet und eine Zeile von 1 auf 2 aktualisiert, ohne noch einen Commit durchzuführen. Folgendes sah die zweite Verbindung:

Connection B reads:   1                     -- no uncommitted data
Connection B writes:  database is locked    -- it has to wait
(A commits)
Connection B reads:   2                     -- now it sees the change

SQLite lässt jeweils nur einen Schreiber zu, was einfacher ist als bei Serverdatenbanken, bei denen viele Transaktionen gleichzeitig verschiedene Zeilen schreiben können. Das Prinzip ist jedoch dasselbe: Andere Sitzungen sollten unter normalen Einstellungen keine nicht festgeschriebenen Änderungen sehen, und widersprüchliche Schreibvorgänge müssen warten. In unserem Test haben wir die zweite Verbindung so eingestellt, dass sie sofort abgebrochen wird, anstatt zu warten, sodass der Fehler sofort auftrat.

Anomalien lesen

Wenn sich Transaktionen überschneiden, können bestimmte Probleme auftreten. Der SQL-Standard definiert diese im Hinblick darauf, was eine Transaktion beobachten kann:

Anomalie Was passiert
Schmutzige Lektüre Sie lesen eine Änderung, die von einer anderen Transaktion nicht festgeschrieben wurde und die möglicherweise später rückgängig gemacht wird
Nicht wiederholbare Lektüre Sie lesen eine Zeile zweimal in einer Transaktion und erhalten unterschiedliche Werte, weil dazwischen jemand etwas begangen hat
Phantom gelesen Sie führen dieselbe Abfrage zweimal aus und erhalten zusätzliche oder fehlende Zeilen, weil jemand einige eingefügt oder gelöscht hat

Ein weiteres Problem ist das verlorene Update. Zwei Sitzungen lesen einen Saldo von 100, jede addiert 10 und jede schreibt 110. Ein Update ist praktisch verschwunden, obwohl die Antwort 120 lauten sollte.

SQL-Isolationsstufen

Mit Isolationsstufen können Sie Strenge gegen Parallelität eintauschen. Folgendes erlaubt der SQL-Standard auf jeder Ebene:

Ebene Schmutzige Lektüre Nicht wiederholbare Lektüre Phantom gelesen
Unverbindlich lesen Möglich Möglich Möglich
Lesen Sie engagiert Verhindert Möglich Möglich
Wiederholbare Lektüre Verhindert Verhindert Möglich
Serialisierbar Verhindert Verhindert Verhindert
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

Die genaue Syntax und das Verhalten hängen von Ihrer Datenbank ab. Auch die Standardeinstellungen unterscheiden sich: PostgreSQL und SQL Server verwenden Read Committed, während InnoDB von MySQL wiederholbares Lesen verwendet. Einige Datenbanken bieten stärkere Garantien, als der Standard erfordert, oder behandeln eine Ebene als eine andere. In PostgreSQL verhält sich beispielsweise read uncommitted wie read commit. Lesen Sie immer die Dokumentation Ihrer Datenbank, bevor Sie sich auf ein bestimmtes Verhalten verlassen.

Tipp: Nehmen Sie bei einem verlorenen Update die Änderung in einer einzigen Anweisung vor, wie in UPDATE accounts SET balance = balance + 10. Wenn Sie die Berechnung in Ihrer Bewerbung anhand einer früheren Lektüre durchführen, wird die Lücke geöffnet.

Deadlocks

Ein Deadlock tritt auf, wenn zwei Transaktionen jeweils eine Sperre halten, die die andere benötigt. Transaktion A sperrt Zeile 1 und möchte Zeile 2, während Transaktion B Zeile 2 sperrt und Zeile 1 möchte. Keiner von beiden kann fortfahren.

Datenbanken wie PostgreSQL, MySQL und SQL Server erkennen dies und brechen eine Transaktion mit einem Fehler ab. Das ist normales Verhalten und Ihre Bewerbung sollte darauf vorbereitet sein. Um Deadlocks zu reduzieren, aktualisieren Sie die Zeilen immer in einer konsistenten Reihenfolge, z. B. mit der niedrigsten Konto-ID zuerst, halten Sie die Transaktionen kurz und versuchen Sie es erneut, wenn jemand als Opfer ausgewählt wird.

Best Practices

  • Halten Sie Transaktionen kurz. Lange Transaktionen halten Sperren und blockieren andere Benutzer.
  • Warten Sie niemals auf einen Benutzer oder eine langsame API innerhalb einer Transaktion. Erledigen Sie diese Arbeit, bevor Sie beginnen, oder danach.
  • Fehler immer behandeln. Jeder Pfad sollte mit einem Commit oder einem Rollback enden.
  • Fügen Sie Einschränkungen hinzu. Sie geben der Datenbank echte Regeln vor, die durchgesetzt werden müssen. Gutes Tischdesign hilft auch.
  • Verwenden Sie gute Indizes. Schnellere Suchvorgänge bedeuten, dass Sperren kürzer gehalten werden.
  • Seien Sie bei Wiederholungsversuchen vorsichtig. Versuchen Sie es bei Deadlocks noch einmal, aber stellen Sie sicher, dass ein Vorgang nicht zweimal angewendet werden kann.
  • Testen Sie die Parallelität absichtlich. Viele dieser Fehler treten nur unter Last auf, sodass grundlegende Integrationstests allein sie möglicherweise nicht aufdecken.

Fazit

Transaktionen verwandeln mehrere riskante Schritte in einen sicheren Vorgang, und ACID beschreibt die Garantien, die diesen Vorgang vertrauenswürdig machen. Wenn eine Geschäftsaktion mehr als eine Zeile oder Tabelle betrifft, fragen Sie sich, was passieren würde, wenn sie auf halbem Weg gestoppt würde. Wenn Ihnen die Antwort Sorgen bereitet, schließen Sie sie in eine Transaktion ein. Öffnen Sie zum Üben zwei Sitzungen in einer lokalen Datenbank und versuchen Sie, die Anomalien selbst zu erzeugen.

Häufige Fragen

Was ist eine Transaktion in SQL?

Eine Transaktion ist eine Gruppe von SQL-Anweisungen, die als eine Einheit behandelt werden. Entweder werden alle mit COMMIT gespeichert, oder alle werden mit ROLLBACK rückgängig gemacht.

Was sind ACID-Eigenschaften in einer Datenbank?

ACID steht für Atomizität, Konsistenz, Isolation und Haltbarkeit. Gemeinsam stellen sie sicher, dass es bei Transaktionen um „Alles oder Nichts“ geht, die Regeln intakt bleiben, sich nicht einmischen und Ausfälle überstehen.

Was ist der Unterschied zwischen COMMIT und ROLLBACK?

COMMIT speichert dauerhaft alle in der Transaktion vorgenommenen Änderungen. ROLLBACK bricht sie ab und stellt die Daten auf den Zustand vor Beginn der Transaktion zurück.

Was ist eine Dirty Read?

Ein Dirty Read liegt vor, wenn eine Transaktion Änderungen liest, die eine andere noch nicht festgeschrieben hat. Wenn diese andere Transaktion zurückgesetzt wird, waren die gelesenen Daten nie wirklich vorhanden.

Welche Isolationsstufe soll ich verwenden?

Beginnen Sie mit den Standardwerten Ihrer Datenbank, was normalerweise in Ordnung ist. Verwenden Sie serialisierbar für kritische Logik, bei der Anomalien nicht akzeptabel sind, und seien Sie bereit, fehlgeschlagene Transaktionen erneut zu versuchen.

Lerne weiter

Arbeiten Sie mit Stack Quora

Benötigen Sie Hilfe beim Testen, WordPress oder SEO?

Wir helfen Teams, bessere Software zu liefern und ihre Websites zu erweitern. Sagen Sie uns, woran Sie gerade arbeiten, und wir schlagen Ihnen einen klaren nächsten Schritt vor.

Lesen Sie weiter

Weitere Anleitungen finden Sie unter Tests, KI und moderne Entwicklung

Hat Ihnen dieser Artikel gefallen? Wählen Sie ein Thema und springen Sie direkt in unsere neuesten Tutorials.

Künstliche Intelligenz

KI-Halluzinationen erklärt: Warum Sprachmodelle Dinge erfinden und wie man sie reduziert

KI-Halluzinationen erklärt: Was sie sind, warum Sprachmodelle sie produzieren, gängige Typen, wie man sie mit Erdung und Eingabeaufforderungen reduz…

Artikel lesen →
DevOps

Erklärte Umgebungsvariablen: .env-Dateien, Geheimnisse und Konfiguration richtig gemacht

Umgebungsvariablen anhand von Python-Beispielen erklärt, die wir ausgeführt haben: Sie lesen und festlegen, warum jeder Wert ein String ist, .env-Da…

Artikel lesen →
Softwareentwicklung

API-Ratenbegrenzung erklärt: Algorithmen, Header und Behandlung von 429-Fehlern

API-Ratenbegrenzung anhand einer von uns durchgeführten Simulation erklärt: Token-Bucket, festes Fenster, gleitendes Fenster, 429 Antworten, Ratenbe…

Artikel lesen →
Testautomatisierung

Spott in Python: unittest.mock, Patch und die Fehler, die Tests zum Lügen machen

Mocking in Python mit unittest.mock, getestet: Mock und return_value, side_effect, Patchen, wo ein Name verwendet wird, Spezifikation und Autospec, …

Artikel lesen →
Softwaretests

Code-Abdeckung erklärt: Leitungs- und Zweigstellenabdeckung und was 100 % wirklich bedeutet

Erklärung der Codeabdeckung anhand eines echten Coverage.py-Laufs: Zeilen-, Zweig- und Bedingungsabdeckung, Lesen eines Berichts, warum bei 100 % Ab…

Artikel lesen →
Datenbanken & SQL

DELETE vs. TRUNCATE vs. DROP in SQL: Unterschiede, Rollback und Verwendungszweck

DELETE vs. TRUNCATE vs. DROP erklärt mit getestetem SQL: was jeweils entfernt wird, Rollback, Trigger, Identitätsrücksetzung, Geschwindigkeit und wi…

Artikel lesen →
Datenbanken & SQL

Erklärte SQL-Ansichten: Erstellen, nutzen und vermeiden Sie Fallstricke mit Beispielen

SQL-Ansichten anhand der von uns ausgeführten Abfragen erklärt: Erstellen einer Ansicht, Live-Ergebnisse, Ausblenden von Spalten, Leistung, aktualis…

Artikel lesen →
Softwareentwicklung

TypeScript-Schnittstelle vs. Typ: Echte Unterschiede, getestet mit dem Compiler

TypeScript-Schnittstelle vs. Typ, überprüft mit dem echten Compiler: Was beide können, was nur einer kann, Deklarationszusammenführung, Erweiterunge…

Artikel lesen →
Softwareentwicklung

Python *args und **kwargs erklärt: Flexible Funktionen mit klaren Beispielen

Python *args und **kwargs erklärt mit Code, den wir ausgeführt haben: Packen und Entpacken, Parameterreihenfolge, Nur-Schlüsselwort- und Nur-Positio…

Artikel lesen →
Softwareentwicklung

Python-Lambda-Funktionen: Syntax, tatsächliche Verwendung und wann man sie nicht verwendet

Python-Lambda-Funktionen erklärt mit Code, den wir ausgeführt haben: Syntax, Sortierung mit Schlüssel, Karte und Filter, Abschlüsse, die Late-Bindin…

Artikel lesen →
Künstliche Intelligenz

Was sind KI-Agenten? Wie sie funktionieren, mit einer einfachen Agentenschleife, die Sie ausführen können

Was sind KI-Agenten? Eine einfache Anleitung zur Agentenschleife, zu Tools, Speicher und Leitplanken, mit einer kleinen Python-Schleife, die wir aus…

Artikel lesen →
DevOps

Überwachung vs. Beobachtbarkeit: Der wahre Unterschied, mit Protokollen, Metriken und Traces

Überwachung vs. Beobachtbarkeit erklärt: bekannte und unbekannte Fehler, Protokolle, Metriken und Spuren, eine exemplarische Vorgehensweise für Chec…

Artikel lesen →
DevOps

Docker-Volumes vs. Bind Mounts: Containerdaten auf die richtige Art und Weise beibehalten

Docker-Volumes vs. Bind-Mounts erklärt: Warum Containerdaten verschwinden, benannte Volumes, Bind-Mounts, tmpfs, Compose-Beispiele, Backups, Berecht…

Artikel lesen →
Testautomatisierung

TDD vs. BDD: Hauptunterschiede, eine Funktion, die auf beide Arten entwickelt wurde und wann sie jeweils verwendet werden sollte

TDD vs. BDD erklärt mit einer Rabattfunktion, die in beide Richtungen aufgebaut ist: Rot-Grün-Refaktor mit Code, den wir ausgeführt haben, Gegeben-W…

Artikel lesen →
Softwaretests

Benutzerakzeptanztests (UAT): Prozess, Checkliste und reale Beispiele

Benutzerakzeptanztests erklärt: Wer führt ihn durch, wie unterscheidet er sich von der Qualitätssicherung, ein siebenstufiger Prozess, eine UAT-Test…

Artikel lesen →
Datenbanken & SQL

Erklärte SQL-NULL-Werte: IS NULL, COALESCE, NULLIF und die zu vermeidenden Fallen

SQL-NULL-Werte, die mit von uns ausgeführten Abfragen erklärt wurden: dreiwertige Logik, IS NULL, COALESCE, NULLIF, wie Aggregate, Joins und Sortier…

Artikel lesen →
Datenbanken & SQL

SQL CASE WHEN-Anweisung: Syntax, reale Beispiele und häufige Fehler

SQL CASE WHEN anhand der von uns ausgeführten Abfragen erklärt: einfache und durchsuchte Formulare, Bedingungsreihenfolge, Pivots mit SUM, COUNT-Tri…

Artikel lesen →
Softwareentwicklung

Was ist JWT? JSON-Web-Tokens anhand eines funktionierenden Beispiels erklärt

Was ist JWT? JSON Web Tokens erklärt: die drei Teile, ein Token, das in dem von uns ausgeführten Code erstellt und manipuliert wurde, JWT vs. Sitzun…

Artikel lesen →
Softwareentwicklung

Erklärte JavaScript-Ereignisschleife: Aufrufstapel, Mikrotasks und Timer mit Beispielen

Die JavaScript-Ereignisschleife wurde mit dem von uns ausgeführten Code erklärt: Aufrufstapel, Aufgaben- und Mikrotask-Warteschlangen, warum setTime…

Artikel lesen →
Softwareentwicklung

Erklärung von Python-Generatoren und -Ertrag: Sparen Sie Speicher mit echten Beispielen

Python-Generatoren und Yield anhand des von uns ausgeführten Codes erklärt: wie sie angehalten und fortgesetzt werden, gemessene Speichereinsparunge…

Artikel lesen →
Künstliche Intelligenz

Was sind Einbettungen? Vektoren und Kosinusähnlichkeit einfach erklärt

Was sind Einbettungen? Ein Leitfaden in einfacher Sprache zu Vektoren, Kosinusähnlichkeit und semantischer Suche, mit einem kleinen Beispiel, das wi…

Artikel lesen →
DevOps

Blau-Grün vs. Canary-Bereitstellung: Unterschiede, Kompromisse und Auswahl

Blue-Green vs. Canary-Bereitstellung erklärt: Funktionsweise, Kosten, Risiko und Rollback, stabiles Benutzer-Bucketing, das wir getestet haben, Date…

Artikel lesen →
Testautomatisierung

Flaky-Tests: Was sie verursacht und wie man sie endgültig behebt

Flaky-Tests wurden anhand von Demos erklärt, die wir durchgeführt haben: die Hauptursachen, wie man sie bestätigt und diagnostiziert, richtige Korre…

Artikel lesen →
Softwaretests

Lasttest vs. Stresstest: Unterschiede, Metriken und k6-Beispiele

Erläuterungen zu Lasttests und Stresstests: Was die einzelnen Tests beweisen, Spike- und Soak-Tests, welche Kennzahlen wichtig sind, warum Durchschn…

Artikel lesen →
Softwaretests

Testfall vs. Testszenario: Hauptunterschiede, Beispiele und wann man sie jeweils verwendet

Testfall vs. Testszenario erklärt: klare Definitionen, eine Tabelle nebeneinander, eine Funktion zum Zurücksetzen von Passwörtern, die von Szenarios…

Artikel lesen →
Datenbanken & SQL

SQL-Abfrageoptimierung: Ausführungspläne lesen und langsame Abfragen mit Zeitvorgaben beheben

An einer Million Zeilen getestete SQL-Abfrageoptimierung: Ausführungspläne lesen, die richtigen Indizes hinzufügen, nicht sargierbare Filter korrigi…

Artikel lesen →
Datenbanken & SQL

SQL UNION vs. UNION ALL: Unterschiede, Beispiele und getestete Leistung

SQL UNION vs. UNION ALL anhand der von uns ausgeführten Abfragen erklärt: Duplikate, die Regeln, denen beide folgen, ein echter Datenfehler, gemesse…

Artikel lesen →
Softwareentwicklung

Tutorial zur JavaScript-Abruf-API: GET, POST, Fehlerbehandlung und Zeitüberschreitungen

Ein JavaScript-Abruf-API-Tutorial, das auf einem lokalen Server getestet wurde: GET und POST, warum 404 nicht ausgelöst wird, ein wiederverwendbarer…

Artikel lesen →
Softwareentwicklung

Umgang mit Python-Dateien: Lesen, Schreiben, CSV, JSON und Pathlib mit Beispielen

Die Handhabung von Python-Dateien wird anhand des von uns ausgeführten Codes erklärt: Öffnungsmodi, Lesen großer Dateien, CSV, JSON, Pathlib, Binärd…

Artikel lesen →
Softwareentwicklung

Python-Klassen und -Objekte: OOP-Tutorial mit echten Beispielen

Python-Klassen und -Objekte erklärt mit Code, den wir ausgeführt haben: __init__, Methoden, Klassen- und Instanzattribute, Vererbung, Eigenschaften,…

Artikel lesen →
Künstliche Intelligenz

Was ist ein großes Sprachmodell? Wie LLMs funktionieren, ohne großen Hype erklärt

Was ist ein großes Sprachmodell? LLMs im Klartext erklärt: Token, Einbettungen, Aufmerksamkeit, Training, Temperatur- und Kontextfenster, eine klein…

Artikel lesen →
DevOps

Linux-Befehle für Anfänger: Der grundlegende Terminal-Leitfaden mit Beispielen

Linux-Befehle für Anfänger, gruppiert nach Aufgaben: Navigation, Dateien, Anzeigen von Protokollen, Grep, Pipes, Berechtigungen, Prozesse und Archiv…

Artikel lesen →
Testautomatisierung

Selenium vs. Playwright: Hauptunterschiede, Code im Vergleich und welche Sie wählen sollten

Selenium vs. Playwright im Vergleich: Architektur, Wartezeit, Browser- und Sprachunterstützung, Debugging, der gleiche Test in beiden Tools, Migrati…

Artikel lesen →
Softwaretests

Äquivalenzpartitionierung: Testdesigntechnik anhand von Beispielen erklärt

Erklärung der Äquivalenzpartitionierung: Wie man gültige und ungültige Partitionen findet, Beispiele für Alter, Passwörter und Gutscheine, von uns d…

Artikel lesen →
Softwaretests

Schweregrad vs. Priorität beim Softwaretest: Unterschiede, Matrix und reale Beispiele

Schweregrad vs. Priorität beim Softwaretest erklärt: klare Definitionen, eine Vier-Wege-Matrix mit Beispielen, Stufenskalen, wer die einzelnen Punkt…

Artikel lesen →
Datenbanken & SQL

Tutorial zu SQL-Unterabfragen: Typen, korrelierte Unterabfragen und EXISTS mit Beispielen

Ein SQL-Unterabfrage-Tutorial mit Abfragen, die wir ausgeführt haben: Skalar-, IN-, FROM- und SELECT-Unterabfragen, korrelierte Unterabfragen, EXIST…

Artikel lesen →
Datenbanken & SQL

SQL-Transaktionen und ACID erklärt: COMMIT, ROLLBACK und Isolationsstufen

SQL-Transaktionen und ACID anhand einer von uns durchgeführten Banküberweisung erklärt: COMMIT, ROLLBACK, Sicherungspunkte, Sperren, Isolationsstufe…

Artikel lesen →
Softwareentwicklung

Git merge vs rebase: Unterschiede, Beispiele und wann man was nutzt

Git merge vs rebase erklärt mit echter Log-Ausgabe, einer Vergleichstabelle, der goldenen Regel des Rebase und einem sicheren Team-Workflow.

Artikel lesen →
Softwareentwicklung

Python List Comprehension: Syntax, Beispiele und wann man darauf verzichtet

Python List Comprehension erklärt: Syntax, Filter, if-else, verschachtelte Schleifen, gemessene Zeiten und Fälle, in denen eine normale for-Schleife…

Artikel lesen →
Datenbanken & SQL

SQL Joins erklärt mit Beispielen (Inner, Left, Right, Full)

SQL Joins Schritt für Schritt mit Beispieltabellen und Abfragen verstehen: INNER, LEFT, RIGHT, FULL, CROSS und SELF, plus typische Fehler und Perfor…

Artikel lesen →