Aracılığıyla paylaş


ROLLBACK

Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL

Geçerli işlemi geri alır ve işlemin başlangıcından bu yana yapılan tüm değişiklikleri atar. Etkileşimli işlemlere yönelik gereksinimler ve kullanım desenleri için bkz. Etkileşimli işlemler.

Sözdizimi

ROLLBACK [ TRANSACTION | WORK ]

Parametreler

Bu deyimin parametresi yok.

Notlar

  • Etkin bir işlem yoksa yürütme ROLLBACK bir hataya neden olmaz .
  • bir işlem içindeki bir işlem hatayla sonuçlanırsa, işlem durduruldu durumuna girer. Sonraki okuma ve yazma işlemleri, işlem kullanıcı tarafından açıkça geri alınana kadar bir hatayla reddedilir.
  • Bu deyimi yürütmek için etkin bir işlem ve işlem içinde okunmuş veya değiştirilmiş tüm nesneler üzerinde uygun izinlere sahip olmanız gerekir.

Örnekler

Aşağıdaki örneklerde etkileşimli işlemleri geri alma işlemi gösterilmektedir.

Temel geri alma

Her deyimi ayrı bir hücrede çalıştırın:

BEGIN TRANSACTION;
-- Attempt an insert operation
INSERT INTO my_table VALUES (1, 'incorrect-value');
-- After discovering the mistake, rollback the transaction
-- (no changes are actually made to the tables)
ROLLBACK TRANSACTION;

Yürütme hatalarını işleme

İşlem içerisindeki bir deyim başarısız olduğunda, yeni bir işlem başlatmadan önce işlemi açıkça geri almanız gerekir. Her deyimi ayrı bir hücrede çalıştırın:

BEGIN TRANSACTION;
-- A query that causes a division by zero error
SELECT 1/0;
-- Throws error asking user to roll back the transaction
SELECT 1;
-- After error, user must roll back the transaction
-- as it cannot be committed
ROLLBACK TRANSACTION;

Ayrıştırıcı hatalarını ele alma

Ayrıştırıcı hataları için de açık geri alma gerekir. Her deyimi ayrı bir hücrede çalıştırın:

BEGIN TRANSACTION;
-- A query that causes a parsing error
SELLLLLLECT 1;
-- Throws error asking user to roll back the transaction
SELECT 1;
-- After error, user must roll back the transaction
-- as it cannot be committed
ROLLBACK TRANSACTION;

Koşullu geri alma

İş kurallarına göre koşullu mantık için kullanabilirsiniz ROLLBACK . Her deyimi ayrı bir hücrede çalıştırın:

BEGIN TRANSACTION;
-- Make changes
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- Check a condition and rollback if not met
BEGIN
  DECLARE total_balance INT;
  SET total_balance = (SELECT SUM(balance) FROM accounts);

  IF total_balance < 0 THEN
    ROLLBACK;
  ELSE
    COMMIT;
  END IF;
END;

Başarısız commit işleminden sonra geri dönüş

Başarısız COMMIT olursa, açıkça geri dönmeniz gerekir. Her deyimi ayrı bir hücrede çalıştırın:

BEGIN TRANSACTION;
-- Make changes
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- Attempt to commit
COMMIT;
-- If COMMIT fails (e.g., due to write conflict),
-- the transaction is aborted
-- You must explicitly roll back before starting a new transaction
ROLLBACK;