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.
- Eine Transaktion gruppiert Anweisungen so, dass sie alle gemeinsam erfolgreich sind oder alle gemeinsam fehlschlagen.
COMMITmacht die Änderungen dauerhaft undROLLBACKmacht 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
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.
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.
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 →DevOpsErklä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 →SoftwareentwicklungAPI-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 →TestautomatisierungSpott 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 →SoftwaretestsCode-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 & SQLDELETE 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 & SQLErklä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 →SoftwareentwicklungTypeScript-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 →SoftwareentwicklungPython *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 →SoftwareentwicklungPython-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 IntelligenzWas 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 →DevOpsDocker-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 →TestautomatisierungTDD 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 →SoftwaretestsBenutzerakzeptanztests (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 & SQLErklä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 & SQLSQL 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 →SoftwareentwicklungWas 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 →SoftwareentwicklungErklä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 →SoftwareentwicklungErklä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 IntelligenzWas 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 →DevOpsBlau-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 →TestautomatisierungFlaky-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 →SoftwaretestsLasttest 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 →SoftwaretestsTestfall 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 & SQLSQL-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 & SQLSQL 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 →SoftwareentwicklungTutorial 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 →SoftwareentwicklungUmgang 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 →SoftwareentwicklungPython-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 IntelligenzWas 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 →DevOpsLinux-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 →TestautomatisierungSelenium 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 →SoftwaretestsSchweregrad 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 & SQLTutorial 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 & SQLSQL-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 →SoftwareentwicklungGit 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 →SoftwareentwicklungPython 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 & SQLSQL 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 →