Ana içeriğe geç
Kesit SQL
Orta · Veri Değiştirme

Transaction: BEGIN, COMMIT, ROLLBACK

Ya hep ya hiç: birden çok değişikliği tek iş birimi yapmak.

Uygulamada aç, 6 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

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;
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.

Alıştırmalara geç (6)