Junior — Middle
Verilənlər bazası cədvəlində məlumatların toplu yenilənməsini necə həyata keçirmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
Go-da veriləri partiyalı yeniləmək üçün adətən çox parametrli hazırlanmış SQL sorğuları və ya atomiklik və səmərəliliyi artırmaq üçün tranzaksiyalar istifadə olunur.
database/sql istifadə edərək partiyalı yeniləmə nümunəsi:
import (
"database/sql"
_ "github.com/lib/pq" // PostgreSQL üçün sürücü
"log"
)
func batchUpdate(db *sql.DB, updates map[int]string) error {
tx, err := db.Begin()
if err != nil {
return err
}
stmt, err := tx.Prepare("UPDATE my_table SET value = $1 WHERE id = $2")
if err != nil {
tx.Rollback()
return err
}
defer stmt.Close()
for id, val := range updates {
if _, err := stmt.Exec(val, id); err != nil {
tx.Rollback()
return err
}
}
return tx.Commit()
}
Burada:
- Qrup icra üçün tranzaksiya yaradılır.
- Bir tək yeniləmə sorğusu hazırlanır.
- Döngü ilə müxtəlif parametrlərlə yeniləmələr həyata keçirilir.
- Sonda tranzaksiya təsdiqlənir.
Bu yanaşma, tək-tək sorğuların tranzaksiya olmadan həyata keçirilməsindən daha səmərəlidir.
Əgər verilənlər bazası bir neçə sətiri tək sorğu ilə yeniləməyə dəstək verirsə (məsələn, CASE WHEN istifadə etməklə), mürəkkəb sorğu hazırlamaq mümkündür, amma bu, konkret verilənlər bazası sistemindən və vəzifədən asılıdır.