Para transferi örneği
A hesabından 100 TL düşüp B hesabına ekliyorsun. İlk adımdan sonra sistem çökerse para buharlaşır. Transaction, adımları bölünmez bir birim yapar:
CREATE TABLE accounts (id INTEGER PRIMARY KEY, owner TEXT, balance REAL CHECK (balance >= 0)); INSERT INTO accounts VALUES (1, 'Ayşe', 500), (2, 'Mehmet', 200); BEGIN TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT; SELECT * FROM accounts;
- BEGIN: İşlemi başlat.
- COMMIT: Tüm değişiklikleri kalıcı yap.
- ROLLBACK: Başlangıçtan beri yapılan her şeyi geri al.
- SAVEPOINT ad / ROLLBACK TO ad: İşlem içinde ara kayıt noktası.
CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance REAL); INSERT INTO accounts VALUES (1, 500); BEGIN; UPDATE accounts SET balance = 0; ROLLBACK; SELECT * FROM accounts; -- bakiye hâlâ 500
Otomatik onay (autocommit)Çoğu istemcide BEGIN yazmazsan her ifade kendi transaction'ında çalışır ve hemen kalıcı olur. Toplu güncellemeleri transaction içine almak hem güvenli hem çok daha hızlıdır.
Derinleş: işlem sınırlarını çizmek
Birlikte başarılı ya da birlikte başarısız olması gereken adımlar tek bir işlemdir: bir siparişi iptal edip stok iade etmek, bir hesaptan düşüp diğerine eklemek. SAVEPOINT, işlemin bir kısmını geri almanı sağlar. İşlemi kısa tut: açık kalan bir işlem kilitleri tutar ve diğer oturumları bekletir.