MySQL COMMIT-Anweisung
Die Anweisung `COMMIT` wird in MySQL verwendet, um alle Änderungen, die während der aktuellen Transaktion vorgenommen wurden, dauerhaft zu speichern. Er schließt die Transaktion ab und macht alle Änderungen für andere Benutzer und Sitzungen verfügbar.
Verwendung
Die Anweisung `COMMIT` wird normalerweise nach einer Reihe von `INSERT`-, `UPDATE`- oder `DELETE`-Operationen verwendet, um sicherzustellen, dass die Änderungen in der Datenbank gespeichert werden. Im Transaktionsmanagement ist es wichtig, die Datenintegrität zu gewährleisten.
COMMIT;
Diese Syntax bestätigt, dass alle Änderungen in der aktuellen Transaktion gespeichert werden und nicht rückgängig gemacht werden können. Beachte, dass `COMMIT` nur in Storage Engines anwendbar ist, die Transaktionen unterstützen, wie z.B. InnoDB. Sie ist nicht anwendbar auf nicht-transaktionale Speicher-Engines wie MyISAM.
Beispiele
1. Basistransaktion Commit
START TRANSACTION;
INSERT INTO accounts (name, balance) VALUES ('John Doe', 1000);
COMMIT;
In diesem Beispiel wird ein neues Konto hinzugefügt und die Änderung mit `COMMIT` gespeichert, um die Transaktion abzuschließen.
2. Mehrere Änderungen festschreiben
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE name = 'John Doe';
UPDATE accounts SET balance = balance + 100 WHERE name = 'Jane Smith';
COMMIT;
In diesem Beispiel werden Gelder zwischen zwei Konten übertragen. Beide Aktualisierungen werden zusammen mit einem einzigen `COMMIT` abgeschlossen, um die Atomizität zu gewährleisten.
3. Bedingtes Commit mit Fehlerbehandlung
Um bedingte Übertragungen und Fehlererkennung zu handhaben, verwende Anwendungslogik oder gespeicherte Prozeduren. Direkte `IF`-Anweisungen in SQL-Skripten werden nicht unterstützt. Hier ist ein Beispiel mit einer gespeicherten Prozedur:
DELIMITER //
CREATE PROCEDURE ConditionalCommit()
BEGIN
DECLARE order_exists INT;
START TRANSACTION;
DELETE FROM orders WHERE order_id = 101;
SELECT COUNT(*) INTO order_exists FROM orders WHERE order_id = 101;
IF order_exists = 0 THEN
COMMIT;
ELSE
ROLLBACK;
END IF;
END //
DELIMITER ;
In diesem Beispiel prüft eine Prozedur, ob die Auftragslöschung erfolgreich ist, bevor sie bestätigt wird.
Tipps und bewährte Praktiken
- Kombiniere mit `START TRANSACTION`. Verwende `COMMIT` mit `START TRANSACTION`, um sicherzustellen, dass Änderungen Teil einer Transaktion sind.
- Behandle Fehler mit `ROLLBACK`. Mach Änderungen vor dem Festschreiben rückgängig, wenn Fehler auftreten.
- Achte auf die Konsistenz von Transaktionen und schließe alle notwendigen Vorgänge innerhalb einer Transaktion ab, bevor du sie festlegst.
- Minimiere die Transaktionsdauer, um Sperren zu reduzieren und die Leistung zu verbessern.
- Teste, bevor du dich verpflichtest, um sicherzustellen, dass alle Änderungen deinen Anforderungen entsprechen.
Zusätzliche Anmerkung
Ein `COMMIT` ohne ein vorangehendes `START TRANSACTION` hat keine Auswirkungen, da keine Änderungen abgeschlossen werden müssen. Achte immer darauf, dass "START TRANSACTION" verwendet wird, um eine Transaktion einzuleiten.