Pengguliran Kembali

Berlaku untuk:centang ditandai ya Databricks SQL

Mengembalikan transaksi saat ini, membuang semua perubahan yang dilakukan sejak awal transaksi. Untuk persyaratan dan pola penggunaan untuk transaksi interaktif, lihat Transaksi interaktif.

Sintaksis

ROLLBACK [ TRANSACTION | WORK ]

Parameter-parameternya

Pernyataan ini tidak memiliki parameter.

Catatan

  • Jika tidak ada transaksi aktif, menjalankan ROLLBACKtidak mengakibatkan kesalahan.
  • Jika operasi dalam transaksi menghasilkan kesalahan, transaksi akan memasuki status dibatalkan. Operasi baca dan tulis berikutnya menimbulkan kesalahan hingga transaksi dibatalkan secara eksplisit oleh pengguna.
  • Untuk menjalankan pernyataan ini, Anda harus memiliki transaksi aktif dan izin yang sesuai pada semua objek yang telah dibaca atau dimodifikasi dalam transaksi.

Examples

Contoh berikut menunjukkan cara mengembalikan transaksi interaktif.

Putar kembali dasar

Jalankan setiap pernyataan dalam sel terpisah:

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;

Menangani kesalahan eksekusi

Ketika pernyataan dalam transaksi gagal, Anda harus secara jelas membatalkan sebelum memulai transaksi yang baru. Jalankan setiap pernyataan dalam sel terpisah:

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;

Menangani kesalahan pengurai

Kesalahan pengurai juga memerlukan pembatalan eksplisit. Jalankan setiap pernyataan dalam sel terpisah:

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;

Pembatalan berdasarkan kondisi

Anda dapat menggunakan ROLLBACK untuk logika kondisional berdasarkan aturan bisnis. Jalankan setiap pernyataan dalam sel terpisah:

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;

Gulung balik setelah penerapan gagal

Jika COMMIT mengalami kegagalan, Anda harus secara eksplisit melakukan rollback. Jalankan setiap pernyataan dalam sel terpisah:

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;