Difference between revisions of "Konsep transaksi dan properti ACID"

From OnnoWiki
Jump to navigation Jump to search
(Created page with "Berikut adalah **Modul 6: Transaksi dan Manajemen Konsistensi** yang membahas konsep dasar **transaksi dalam database**, prinsip **ACID**, serta contoh implementasinya menggun...")
 
Line 1: Line 1:
Berikut adalah **Modul 6: Transaksi dan Manajemen Konsistensi** yang membahas konsep dasar **transaksi dalam database**, prinsip **ACID**, serta contoh implementasinya menggunakan **MySQL di Ubuntu 24.04**.
+
==Tujuan Pembelajaran==
 
 
---
 
 
 
## 🧠 **Modul 6: Transaksi dan Manajemen Konsistensi**
 
 
 
### 🎯 **Tujuan Pembelajaran**
 
 
Setelah mempelajari modul ini, mahasiswa diharapkan mampu:
 
Setelah mempelajari modul ini, mahasiswa diharapkan mampu:
- Menjelaskan konsep **transaksi** dalam basis data.
+
* Menjelaskan konsep '''transaksi''' dalam basis data.
- Memahami prinsip **ACID** untuk menjaga konsistensi data.
+
* Memahami prinsip '''ACID''' untuk menjaga konsistensi data.
- Mengimplementasikan transaksi menggunakan **MySQL di Ubuntu 24.04**.
+
* Mengimplementasikan transaksi menggunakan '''MySQL di Ubuntu 24.04'''.
 
 
---
 
  
## 📚 **6.1 Apa Itu Transaksi?**
 
  
**Transaksi** adalah satu unit kerja logis dalam sistem basis data yang mencakup satu atau lebih perintah SQL. Transaksi dianggap **berhasil** jika semua perintah di dalamnya berhasil dijalankan. Jika salah satu gagal, seluruh transaksi harus dibatalkan (rollback).
+
==Apa Itu Transaksi?==
  
### 📌 Contoh Umum Transaksi:
+
'''Transaksi''' adalah satu unit kerja logis dalam sistem basis data yang mencakup satu atau lebih perintah SQL. Transaksi dianggap '''berhasil''' jika semua perintah di dalamnya berhasil dijalankan. Jika salah satu gagal, seluruh transaksi harus dibatalkan (rollback).
- Transfer uang antar rekening
 
- Pemesanan tiket
 
- Pembelian barang di e-commerce
 
  
---
+
'''Contoh Umum Transaksi:'''
 +
* Transfer uang antar rekening
 +
* Pemesanan tiket
 +
* Pembelian barang di e-commerce
  
## 🧩 **6.2 Properti ACID**
+
==Properti ACID==
  
 
ACID adalah empat properti utama yang memastikan keandalan transaksi.
 
ACID adalah empat properti utama yang memastikan keandalan transaksi.
  
| Properti  | Penjelasan                                                                 |
+
{| class="wikitable"
|------------|------------------------------------------------------------------------------|
+
! Properti  !! Penjelasan
| **A**tomicity  | Seluruh transaksi dijalankan sepenuhnya atau tidak sama sekali             |
+
|-
| **C**onsistency| Menjaga integritas data sebelum dan sesudah transaksi                     |
+
| '''A'''tomicity  || Seluruh transaksi dijalankan sepenuhnya atau tidak sama sekali
| **I**solation  | Transaksi berjalan seolah-olah satu per satu (tidak saling mengganggu)   |
+
|-
| **D**urability  | Hasil transaksi tetap ada meskipun terjadi crash setelah commit           |
+
| '''C'''onsistency|| Menjaga integritas data sebelum dan sesudah transaksi
 
+
|-
---
+
| '''I'''solation  || Transaksi berjalan seolah-olah satu per satu (tidak saling mengganggu)
 
+
|-
## 🛠️ **6.3 Implementasi Transaksi di MySQL (Ubuntu 24.04)**
+
| '''D'''urability  || Hasil transaksi tetap ada meskipun terjadi crash setelah commit
 +
|}
  
### 🔧 **Langkah Awal: Aktifkan MySQL dan Masuk ke CLI**
+
==Implementasi Transaksi di MySQL (Ubuntu 24.04)==
```bash
 
sudo systemctl start mysql
 
sudo mysql -u root -p
 
```
 
  
---
+
'''Langkah Awal: Aktifkan MySQL dan Masuk ke CLI'''
  
## 🧪 **6.4 Studi Kasus: Transfer Saldo**
+
sudo systemctl start mysql
 +
sudo mysql -u root -p
  
### 🏦 **Tabel: rekening**
+
===Studi Kasus: Transfer Saldo==
```sql
 
CREATE TABLE rekening (
 
    id INT PRIMARY KEY,
 
    nama VARCHAR(50),
 
    saldo INT
 
);
 
  
INSERT INTO rekening VALUES (1, 'Andi', 100000), (2, 'Budi', 50000);
+
'''Tabel: rekening'''
```
 
  
---
+
CREATE TABLE rekening (
 +
    id INT PRIMARY KEY,
 +
    nama VARCHAR(50),
 +
    saldo INT
 +
);
 +
 +
INSERT INTO rekening VALUES (1, 'Andi', 100000), (2, 'Budi', 50000);
  
### 🔄 **6.5 Transaksi di MySQL**
+
==Transaksi di MySQL==
  
 
Perintah utama:
 
Perintah utama:
  
- `START TRANSACTION;`
+
* `START TRANSACTION;`
- `COMMIT;`
+
* `COMMIT;`
- `ROLLBACK;`
+
* `ROLLBACK;`
 
 
---
 
 
 
### ✅ **Contoh Transaksi: Transfer Rp20.000 dari Andi ke Budi**
 
 
 
```sql
 
-- Mulai transaksi
 
START TRANSACTION;
 
 
 
-- Kurangi saldo Andi
 
UPDATE rekening SET saldo = saldo - 20000 WHERE id = 1;
 
  
-- Tambah saldo Budi
+
'''Contoh Transaksi: Transfer Rp20.000 dari Andi ke Budi'''
UPDATE rekening SET saldo = saldo + 20000 WHERE id = 2;
 
  
-- Selesaikan transaksi
+
-- Mulai transaksi
COMMIT;
+
START TRANSACTION;
```
+
 +
-- Kurangi saldo Andi
 +
UPDATE rekening SET saldo = saldo - 20000 WHERE id = 1;
 +
 +
-- Tambah saldo Budi
 +
UPDATE rekening SET saldo = saldo + 20000 WHERE id = 2;
 +
 +
-- Selesaikan transaksi
 +
COMMIT;
  
 
> Jika ada error, gunakan `ROLLBACK;` untuk membatalkan transaksi.
 
> Jika ada error, gunakan `ROLLBACK;` untuk membatalkan transaksi.
  
---
+
'''Contoh dengan ROLLBACK'''
 
 
### ❌ **Contoh dengan ROLLBACK**
 
 
 
```sql
 
START TRANSACTION;
 
 
 
UPDATE rekening SET saldo = saldo - 20000 WHERE id = 1;
 
 
 
-- Simulasi kesalahan
 
-- ERROR: tabel tidak ditemukan
 
UPDATE rekening_tidak_ada SET saldo = saldo + 20000 WHERE id = 2;
 
 
 
-- Batalkan seluruh transaksi
 
ROLLBACK;
 
```
 
  
> Saldo Andi akan **kembali ke semula** karena transaksi dibatalkan.
+
START TRANSACTION;
 +
 +
UPDATE rekening SET saldo = saldo - 20000 WHERE id = 1;
 +
 +
-- Simulasi kesalahan
 +
-- ERROR: tabel tidak ditemukan
 +
UPDATE rekening_tidak_ada SET saldo = saldo + 20000 WHERE id = 2;
 +
 +
-- Batalkan seluruh transaksi
 +
ROLLBACK;
  
---
+
> Saldo Andi akan '''kembali ke semula''' karena transaksi dibatalkan.
  
## 🔐 **6.6 Isolation Level (Opsional)**
+
==Isolation Level (Opsional)==
  
 
Untuk kontrol lebih lanjut, bisa gunakan perintah:
 
Untuk kontrol lebih lanjut, bisa gunakan perintah:
  
```sql
+
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
 
```
 
  
 
Tersedia 4 level isolasi di MySQL:
 
Tersedia 4 level isolasi di MySQL:
- `READ UNCOMMITTED`
+
* `READ UNCOMMITTED`
- `READ COMMITTED`
+
* `READ COMMITTED`
- `REPEATABLE READ` (default)
+
* `REPEATABLE READ` (default)
- `SERIALIZABLE`
+
* `SERIALIZABLE`
 
 
---
 
  
## 📌 **6.7 Kesimpulan**
+
==Kesimpulan==
  
- Transaksi penting untuk memastikan konsistensi dan keandalan sistem basis data.
+
* Transaksi penting untuk memastikan konsistensi dan keandalan sistem basis data.
- Properti **ACID** menjamin bahwa transaksi aman dijalankan.
+
* Properti '''ACID''' menjamin bahwa transaksi aman dijalankan.
- MySQL mendukung transaksi menggunakan perintah `START TRANSACTION`, `COMMIT`, dan `ROLLBACK`.
+
* MySQL mendukung transaksi menggunakan perintah `START TRANSACTION`, `COMMIT`, dan `ROLLBACK`.
- Pastikan engine tabel yang digunakan adalah **InnoDB**, bukan MyISAM (yang tidak mendukung transaksi).
+
* Pastikan engine tabel yang digunakan adalah '''InnoDB''', bukan MyISAM (yang tidak mendukung transaksi).
  
---
+
==Pranala Menarik==
  
Kalau kamu mau saya bantu buat kuis soal ACID atau simulasi kasus transaksi e-commerce menggunakan trigger dan stored procedure, tinggal bilang ya!
+
* [[Database: Kuliah]]

Revision as of 08:23, 14 April 2025

Tujuan Pembelajaran

Setelah mempelajari modul ini, mahasiswa diharapkan mampu:

  • Menjelaskan konsep transaksi dalam basis data.
  • Memahami prinsip ACID untuk menjaga konsistensi data.
  • Mengimplementasikan transaksi menggunakan MySQL di Ubuntu 24.04.


Apa Itu Transaksi?

Transaksi adalah satu unit kerja logis dalam sistem basis data yang mencakup satu atau lebih perintah SQL. Transaksi dianggap berhasil jika semua perintah di dalamnya berhasil dijalankan. Jika salah satu gagal, seluruh transaksi harus dibatalkan (rollback).

Contoh Umum Transaksi:

  • Transfer uang antar rekening
  • Pemesanan tiket
  • Pembelian barang di e-commerce

Properti ACID

ACID adalah empat properti utama yang memastikan keandalan transaksi.

Properti Penjelasan
Atomicity Seluruh transaksi dijalankan sepenuhnya atau tidak sama sekali
Consistency Menjaga integritas data sebelum dan sesudah transaksi
Isolation Transaksi berjalan seolah-olah satu per satu (tidak saling mengganggu)
Durability Hasil transaksi tetap ada meskipun terjadi crash setelah commit

Implementasi Transaksi di MySQL (Ubuntu 24.04)

Langkah Awal: Aktifkan MySQL dan Masuk ke CLI

sudo systemctl start mysql
sudo mysql -u root -p

=Studi Kasus: Transfer Saldo

Tabel: rekening

CREATE TABLE rekening (
    id INT PRIMARY KEY,
    nama VARCHAR(50),
    saldo INT
);

INSERT INTO rekening VALUES (1, 'Andi', 100000), (2, 'Budi', 50000);

Transaksi di MySQL

Perintah utama:

  • `START TRANSACTION;`
  • `COMMIT;`
  • `ROLLBACK;`

Contoh Transaksi: Transfer Rp20.000 dari Andi ke Budi

-- Mulai transaksi
START TRANSACTION;

-- Kurangi saldo Andi
UPDATE rekening SET saldo = saldo - 20000 WHERE id = 1;

-- Tambah saldo Budi
UPDATE rekening SET saldo = saldo + 20000 WHERE id = 2;

-- Selesaikan transaksi
COMMIT;

> Jika ada error, gunakan `ROLLBACK;` untuk membatalkan transaksi.

Contoh dengan ROLLBACK

START TRANSACTION;

UPDATE rekening SET saldo = saldo - 20000 WHERE id = 1;

-- Simulasi kesalahan
-- ERROR: tabel tidak ditemukan
UPDATE rekening_tidak_ada SET saldo = saldo + 20000 WHERE id = 2;

-- Batalkan seluruh transaksi
ROLLBACK;

> Saldo Andi akan kembali ke semula karena transaksi dibatalkan.

Isolation Level (Opsional)

Untuk kontrol lebih lanjut, bisa gunakan perintah:

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

Tersedia 4 level isolasi di MySQL:

  • `READ UNCOMMITTED`
  • `READ COMMITTED`
  • `REPEATABLE READ` (default)
  • `SERIALIZABLE`

Kesimpulan

  • Transaksi penting untuk memastikan konsistensi dan keandalan sistem basis data.
  • Properti ACID menjamin bahwa transaksi aman dijalankan.
  • MySQL mendukung transaksi menggunakan perintah `START TRANSACTION`, `COMMIT`, dan `ROLLBACK`.
  • Pastikan engine tabel yang digunakan adalah InnoDB, bukan MyISAM (yang tidak mendukung transaksi).

Pranala Menarik