GoDasturchi
Transactions

Transactions

Tranzaksiyalar

Bir nechta amalni "hammasi yoki hech biri" tamoyili bilan bajarish kerak bo'lsa (masalan pul o'tkazish: bir hisobdan ayirish, boshqasiga qo'shish), tranzaksiya ishlatiladi.

example.go
tx, err := db.Begin()
if err != nil {
	fmt.Println("xato:", err)
	return
}

_, err = tx.Exec("INSERT INTO users (name, age) VALUES (?, ?)", "Kamola", int64(28))
if err != nil {
	tx.Rollback() // biror qadam muvaffaqiyatsiz bo'lsa — HAMMASINI bekor qiling
	fmt.Println("xato, bekor qilindi:", err)
	return
}

if err := tx.Commit(); err != nil { // hammasi joyida bo'lsa — o'zgarishlarni tasdiqlang
	fmt.Println("commit xatosi:", err)
	return
}
fmt.Println("tranzaksiya muvaffaqiyatli")

db.Begin() yangi tranzaksiya boshlaydi va *sql.Tx qaytaradi — u db bilan bir xil Exec/Query metodlariga ega. Agar yo'lda biror xato yuz bersa, tx.Rollback() chaqirilib, shu tranzaksiya ichidagi barcha o'zgarishlar bekor qilinadi — xuddi ular umuman bo'lmagandek. Hammasi muvaffaqiyatli bo'lsa, tx.Commit() o'zgarishlarni doimiy qiladi. Bu — ma'lumotlar bazasining eng muhim kafolatlaridan biri: qisman bajarilgan, chala amaliyot hech qachon saqlanib qolmaydi.

>_ Exercise

Tranzaksiya ichida ikkita amalni bajaring.

  • db.Begin() bilan tranzaksiya boshlang
  • tx.Exec bilan ikkita INSERT bajaring
  • tx.Commit() qiling va memTable uzunligini chop eting

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

db.Begin()/tx.Commit()/tx.Rollback() — bir nechta amalni "hammasi yoki hech biri" tamoyili bilan bajarishning standart usuli.

NEXT UP

Connection Pool Configuration

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Transactions

Tranzaksiyalar

Bir nechta amalni "hammasi yoki hech biri" tamoyili bilan bajarish kerak bo'lsa (masalan pul o'tkazish: bir hisobdan ayirish, boshqasiga qo'shish), tranzaksiya ishlatiladi.

example.go
tx, err := db.Begin()
if err != nil {
	fmt.Println("xato:", err)
	return
}

_, err = tx.Exec("INSERT INTO users (name, age) VALUES (?, ?)", "Kamola", int64(28))
if err != nil {
	tx.Rollback() // biror qadam muvaffaqiyatsiz bo'lsa — HAMMASINI bekor qiling
	fmt.Println("xato, bekor qilindi:", err)
	return
}

if err := tx.Commit(); err != nil { // hammasi joyida bo'lsa — o'zgarishlarni tasdiqlang
	fmt.Println("commit xatosi:", err)
	return
}
fmt.Println("tranzaksiya muvaffaqiyatli")

db.Begin() yangi tranzaksiya boshlaydi va *sql.Tx qaytaradi — u db bilan bir xil Exec/Query metodlariga ega. Agar yo'lda biror xato yuz bersa, tx.Rollback() chaqirilib, shu tranzaksiya ichidagi barcha o'zgarishlar bekor qilinadi — xuddi ular umuman bo'lmagandek. Hammasi muvaffaqiyatli bo'lsa, tx.Commit() o'zgarishlarni doimiy qiladi. Bu — ma'lumotlar bazasining eng muhim kafolatlaridan biri: qisman bajarilgan, chala amaliyot hech qachon saqlanib qolmaydi.

>_ Exercise

Tranzaksiya ichida ikkita amalni bajaring.

  • db.Begin() bilan tranzaksiya boshlang
  • tx.Exec bilan ikkita INSERT bajaring
  • tx.Commit() qiling va memTable uzunligini chop eting

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

db.Begin()/tx.Commit()/tx.Rollback() — bir nechta amalni "hammasi yoki hech biri" tamoyili bilan bajarishning standart usuli.

NEXT UP

Connection Pool Configuration