Go Academy · Pelajaran

Transaksi dan Migrasi

Pola BEGIN/COMMIT dan migrasi skema

Pelajaran 4 dari 413 langkah

Transaksi dan Migrasi adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Transaksi dalam database/sql

Bungkus operasi dalam transaksi dengan db.BeginTx. Lakukan Commit atau Rollback di akhir; selalu tunda rollback untuk menangani kepanikan.

tx, err := db.BeginTx(ctx, nil)
if err != nil { return err }
defer tx.Rollback() // no-op after Commit

_, err = tx.ExecContext(ctx, "UPDATE accounts SET balance=balance-100 WHERE id=$1", from)
if err != nil { return err }
_, err = tx.ExecContext(ctx, "UPDATE accounts SET balance=balance+100 WHERE id=$1", to)
if err != nil { return err }
return tx.Commit()

Tingkat isolasi transaksi

Teruskan sql.TxOptions untuk mengendalikan tingkat isolasi:

tx, err := db.BeginTx(ctx, &sql.TxOptions{
    Isolation: sql.LevelSerializable,
    ReadOnly:  false,
})

Menggunakan Tx yang sama di berbagai fungsi

Teruskan *sql.Tx ke fungsi pembantu agar semuanya berpartisipasi dalam transaksi yang sama. Jangan panggil db.ExecContext di dalam transaksi — gunakan tx.ExecContext.

Pola penundaan Rollback

Tunda Rollback segera setelah BeginTx. Jika Commit berhasil, Rollback berikutnya tidak melakukan apa-apa. Jika Commit gagal, Rollback mengembalikan perubahan.

tx, _ := db.BeginTx(ctx, nil)
defer tx.Rollback() // safe no-op after successful Commit

Titik penyimpanan

Gunakan titik penyimpanan di dalam transaksi untuk pengembalian sebagian (khusus PostgreSQL melalui SQL mentah):

tx.ExecContext(ctx, "SAVEPOINT sp1")
// ... work ...
tx.ExecContext(ctx, "ROLLBACK TO SAVEPOINT sp1") // partial rollback

Gambaran umum migrasi basis data

Migrasi adalah skrip SQL berversi yang mengembangkan skema secara bertahap. Setiap migrasi memiliki arah up (terapkan) dan down (kembalikan).

golang-migrate

github.com/golang-migrate/migrate/v4 menjalankan berkas migrasi SQL berversi secara berurutan dan melacak versi yang telah diterapkan dalam tabel schema_migrations.

m, _ := migrate.New("file://migrations", dsn)
m.Up() // apply all pending migrations

goose

github.com/pressly/goose/v3 adalah pustaka migrasi populer lainnya yang mendukung migrasi SQL dan fungsi Go dengan perintah up/down.

goose.Up(db, "migrations")

Atlas untuk pengelolaan skema

Atlas menyediakan pengelolaan skema deklaratif: tentukan keadaan skema yang diinginkan, lalu Atlas menghitung perbedaannya dan membuat skrip migrasi secara otomatis.

Menjalankan migrasi saat mulai

Jalankan migrasi secara terprogram di main sebelum memulai server untuk memastikan skema sudah diperbarui saat penerapan.

if err := runMigrations(db); err != nil { log.Fatal(err) }

Praktik terbaik migrasi

Setiap migrasi: satu fokus dan kompatibel ke depan (bersifat aditif). Jangan pernah langsung menghapus kolom — tandai sebagai usang, lalu hapus dalam migrasi berikutnya setelah kode tidak lagi merujuknya.

Pemeriksaan Singkat

Mengapa Anda harus selalu menunda tx.Rollback() segera setelah BeginTx?

Ringkasan: Transaksi dan Migrasi

Poin utama:

  • BeginTx → defer Rollback → pekerjaan → Commit
  • Teruskan *sql.Tx ke fungsi pembantu; gunakan tx.ExecContext, bukan db.ExecContext
  • Gunakan golang-migrate atau goose untuk migrasi SQL berversi
  • Jalankan migrasi saat mulai; buat setiap migrasi bersifat aditif
Gratis untuk memulai

Belajar Go dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
51
Pelajaran
203

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Transaksi dan Migrasi” gratis?

Ya — teks lengkap “Transaksi dan Migrasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Transaksi dan Migrasi”?

Pola BEGIN/COMMIT dan migrasi skema Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Transaksi dan Migrasi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. database/sql dan Driver
  2. sqlx: Pemindaian Struct dan Kueri Bernama
  3. pgx: Driver PostgreSQL Berkinerja Tinggi
  4. Transaksi dan Migrasi
← Kembali ke Go Academy