SQLite
 sql >> Teknologi Basis Data >  >> RDS >> SQLite

Transaksi SQLite

Ringkasan :dalam tutorial ini, kami akan menunjukkan cara menggunakan transaksi SQLite untuk memastikan integritas dan keandalan data.

SQLite &ACID

SQLite adalah database transaksional yang semua perubahan dan kuerinya bersifat atomik, konsisten, terisolasi, dan tahan lama (ACID).

SQLite menjamin semua transaksi sesuai dengan ACID bahkan jika transaksi terganggu oleh crash program, sistem operasi dump, atau kegagalan daya ke komputer.

  • A tomic:transaksi harus atomik. Artinya, suatu perubahan tidak dapat dipecah menjadi yang lebih kecil. Saat Anda melakukan transaksi, seluruh transaksi diterapkan atau tidak.
  • C onsistent:transaksi harus memastikan untuk mengubah database dari satu status valid ke status lainnya. Ketika transaksi dimulai dan mengeksekusi pernyataan untuk mengubah data, database menjadi tidak konsisten. Namun, ketika transaksi dilakukan atau dibatalkan, penting bahwa transaksi harus menjaga database tetap konsisten.
  • Saya solation:transaksi tertunda yang dilakukan oleh sesi harus diisolasi dari sesi lain. Saat sesi memulai transaksi dan mengeksekusi INSERT atau UPDATE pernyataan untuk mengubah data, perubahan ini hanya terlihat pada sesi saat ini, bukan yang lain. Di sisi lain, perubahan yang dilakukan oleh sesi lain setelah transaksi dimulai seharusnya tidak terlihat oleh sesi saat ini.
  • Tahan lama:jika transaksi berhasil dilakukan, perubahan harus permanen dalam database terlepas dari kondisi seperti kegagalan daya atau program crash. Sebaliknya, jika program mogok sebelum transaksi dilakukan, perubahan tidak akan berlanjut.

Pernyataan transaksi SQLite

Secara default, SQLite beroperasi dalam mode komit otomatis. Artinya, untuk setiap perintah, SQLite memulai, memproses, dan melakukan transaksi secara otomatis.

Untuk memulai transaksi secara eksplisit, Anda menggunakan langkah-langkah berikut:

Pertama, buka transaksi dengan mengeluarkan BEGIN TRANSACTION perintah.

BEGIN TRANSACTION;Code language: SQL (Structured Query Language) (sql)

Setelah mengeksekusi pernyataan BEGIN TRANSACTION , transaksi terbuka hingga dilakukan atau dibatalkan secara eksplisit.

Kedua, mengeluarkan pernyataan SQL untuk memilih atau memperbarui data dalam database. Perhatikan bahwa perubahan hanya dapat dilihat oleh sesi (atau klien) saat ini.

Ketiga, komit perubahan ke database dengan menggunakan COMMIT atau COMMIT TRANSACTION pernyataan.

COMMIT;Code language: SQL (Structured Query Language) (sql)

Jika Anda tidak ingin menyimpan perubahan, Anda dapat memutar kembali menggunakan ROLLBACK atau ROLLBACK TRANSACTION pernyataan:

ROLLBACK;Code language: SQL (Structured Query Language) (sql)

Contoh transaksi SQLite

Kami akan membuat dua tabel baru:accounts dan account_changes untuk demonstrasi.

accounts tabel menyimpan data tentang nomor rekening dan saldonya. account_changes tabel menyimpan perubahan akun.

Pertama, buat accounts dan account_changes tabel dengan menggunakan CREATE TABLE berikut ini pernyataan:

CREATE TABLE accounts ( 
	account_no INTEGER NOT NULL, 
	balance DECIMAL NOT NULL DEFAULT 0,
	PRIMARY KEY(account_no),
        CHECK(balance >= 0)
);

CREATE TABLE account_changes (
	change_no INT NOT NULL PRIMARY KEY,
	account_no INTEGER NOT NULL, 
	flag TEXT NOT NULL, 
	amount DECIMAL NOT NULL, 
	changed_at TEXT NOT NULL 
);Code language: SQL (Structured Query Language) (sql)

Kedua, masukkan beberapa contoh data ke dalam accounts tabel.

INSERT INTO accounts (account_no,balance)
VALUES (100,20100);

INSERT INTO accounts (account_no,balance)
VALUES (200,10100);
Code language: SQL (Structured Query Language) (sql)

Ketiga, kueri data dari accounts tabel:

SELECT * FROM accounts;Code language: SQL (Structured Query Language) (sql)

Keempat, transfer 1000 dari akun 100 ke 200, dan catat perubahannya ke tabel account_changes dalam satu transaksi.

BEGIN TRANSACTION;

UPDATE accounts
   SET balance = balance - 1000
 WHERE account_no = 100;

UPDATE accounts
   SET balance = balance + 1000
 WHERE account_no = 200;
 
INSERT INTO account_changes(account_no,flag,amount,changed_at) 
VALUES(100,'-',1000,datetime('now'));

INSERT INTO account_changes(account_no,flag,amount,changed_at) 
VALUES(200,'+',1000,datetime('now'));

COMMIT;Code language: SQL (Structured Query Language) (sql)

Kelima, query data dari accounts tabel:

SELECT * FROM accounts;Code language: SQL (Structured Query Language) (sql)

Seperti yang Anda lihat, saldo telah berhasil diperbarui.

Keenam, kueri konten account_changes tabel:

SELECT * FROM account_changes;Code language: SQL (Structured Query Language) (sql)

Mari kita ambil contoh lain untuk membatalkan transaksi.

Pertama, coba kurangi 20.000 dari akun 100:

BEGIN TRANSACTION;

UPDATE accounts
   SET balance = balance - 20000
 WHERE account_no = 100;

INSERT INTO account_changes(account_no,flag,amount,changed_at) 
VALUES(100,'-',20000,datetime('now'));Code language: SQL (Structured Query Language) (sql)

SQLite mengeluarkan kesalahan karena saldo tidak cukup:

[SQLITE_CONSTRAINT]  Abort due to constraint violation (CHECK constraint failed: accounts)Code language: CSS (css)

Namun, log telah disimpan ke account_changes tabel:

SELECT * FROM account_changes;Code language: SQL (Structured Query Language) (sql)

Kedua, lakukan rollback transaksi dengan menggunakan ROLLBACK pernyataan:

ROLLBACK;Code language: SQL (Structured Query Language) (sql)

Terakhir, kueri data dari account_changes tabel, Anda akan melihat bahwa perubahan no #3 sudah tidak ada lagi:

SELECT * FROM account_changes;Code language: SQL (Structured Query Language) (sql)

Dalam tutorial ini, Anda telah mempelajari cara menangani transaksi SQLite dengan menggunakan BEGIN TRANSACTION , COMMIT , dan ROLLBACK pernyataan untuk mengontrol transaksi dalam database SQLite.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite ADA

  2. Tutorial SQLite:Semua yang Perlu Anda Ketahui

  3. Simpan data dalam metode onDestroy aktivitas

  4. 2 Cara Mengaktifkan Bungkus Kata di SQLite

  5. Akses Layanan Aktivitas dan Latar Belakang ke Database SQLite