Ana içeriğe geç
Modül 8 · Ders 4 ders 4Kurstaki 32/57~10 min
Modül dersleri (4/4)

İşlemler: ya hep ya hiç

İşlem, veritabanının işlem olarak kabul ettiği bir işlemler grubudur. tek bir birim: ya hepsi başarılı olur ya da hiçbiri bir iz. Bir dizi olduğunda kendinizi tutarsızlıklardan bu şekilde korursunuz. UPDATE/INSERT/DELETE tutarlı kalmalıdır.

Sözdizimi

SQL
BEGIN;             -- apri la transazione

UPDATE …;
INSERT …;
DELETE …;
SELECT …;          -- puoi anche solo leggere

COMMIT;            -- conferma tutte le modifiche
-- oppure
ROLLBACK;          -- annulla tutte le modifiche, come se nulla fosse

BEGIN ve COMMIT arasındaki her şey atomiktir: başka bağlantı yoktur ara durumu görür. Program çökerse veya çalışırsa ROLLBACK, veritabanı tam olarak BEGIN öncesinde olduğu gibi kalır.

Klasik senaryo: transfer

Kanonik örnek, ürünler (veya bir para birimi) arasında bir hisse senedi transferidir. hesaplar arası transfer): birlikte başarılı olması gereken iki UPDATE, asla biri evet diğeri hayır.

SQL
BEGIN;
UPDATE products SET stock = stock - 1 WHERE id = 1;
UPDATE products SET stock = stock + 1 WHERE id = 2;
COMMIT;

İkinci UPDATE başarısız olursa (örneğin, CHECK kısıtlama hatası), bir ROLLBACK ürün 1'in stokunu orijinal değerine geri yükler.

ROLLBACK: DBA'nın hata ayıklayıcısı

SQL
BEGIN;
UPDATE customers SET city = 'X' WHERE id = 1;
SELECT first_name, city FROM customers WHERE id = 1;   -- "vedo come è cambiato"
ROLLBACK;

Gerçek veriler üzerinde UPDATE denemek için çok kullanışlı bir model: siz çalıştırın, aynı işlemde sonucu SELECT ile inceleyin ve eğer sizi ikna etmezse, siz ROLLBACK — veritabanı tam olarak aynı daha önceydi.

KAYIT NOKTASI: kısmi geri alma

Bir işlemin içinde ara noktalar oluşturabilirsiniz:

SQL
BEGIN;
UPDATE customers SET city = 'A' WHERE id = 1;
SAVEPOINT step1;
UPDATE customers SET city = 'B' WHERE id = 2;
-- mi sono accorto che il secondo UPDATE è sbagliato:
ROLLBACK TO SAVEPOINT step1;
COMMIT;     -- solo il primo UPDATE viene confermato

30 saniyede asit

İşlemler ACID özelliklerini garanti eder:

  • Atomicity — ya hep ya hiç;
  • Ctutarlılık — kısıtlamalar işlemin başında ve sonunda karşılanır;
  • Isolation — eşzamanlı işlemler ara durumları görmez (çeşitli "düzeylerde");
  • **Dayanıklılık — başarılı bir COMMIT çarpışma durumunda bile kaybolmaz.

Sıra sende

Egzersiz#sql.m8.l4.e1
Denemeler: 0Yükleniyor…

Tek bir işlemde: 1. ürünün stokunu 1 azaltın ve 2. ürünün stoğunu 1 artırın. BEGIN ile açın ve COMMIT ile kapatın.

Düzenleyici yükleniyor…
İpucu göster

İlgili SET maddelerinde referans stok - 1 ve stok + 1.

3 denemeden sonra çözüm mevcut

Alıştırmayı gözden geçirin

Egzersiz#sql.m8.l4.e2
Denemeler: 0Yükleniyor…

Bir işlem açın, id=1 olan müşterinin şehrini 'Sperimentale' olarak güncellemeyi deneyin, ardından ROLLBACK ile işlemi iptal edin. Sonunda müşteri 1'in şehri orijinal şehir ('Milano') olmalıdır.

Düzenleyici yükleniyor…
İpucu göster

ROLLBACK, BEGIN'den itibaren yapılan her değişikliği iptal eder.

3 denemeden sonra çözüm mevcut