Junior — Middle
Hogyan lehet tömeges adatfrissítést végrehajtani egy adatbázis táblában?
sobes.tech MI
Válasz az MI-től
A Go nyelvű adatbázistábla adatai tömeges frissítéséhez általában előkészített SQL-lekérdezéseket több paraméterrel vagy tranzakciókat használnak a hatékonyság és az atomitás növelése érdekében.
A database/sql használatával példaként bemutatva:
import (
"database/sql"
_ "github.com/lib/pq" // PostgreSQL driver
"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()
}
Ebben:
- Egy tranzakciót hozunk létre csoportos végrehajtáshoz.
- Egyetlen frissítési lekérdezést készítünk elő.
- Egy ciklusban különböző paraméterekkel végrehajtjuk a frissítéseket.
- A végén a tranzakciót megerősítjük.
Ez a megközelítés hatékonyabb, mint az egyedi lekérdezések tranzakció nélkül történő végrehajtása.
Ha az adatbázis támogatja több sor frissítését egyetlen lekérdezéssel (pl. CASE WHEN segítségével), akkor összetett lekérdezést lehet összeállítani, de ez az adott adatbázis-kezelő rendszer és a feladat függvénye.