Datenbank/SQL-TX: Transaktionsstatus erkennen
Frage:
Wie können Sie feststellen ob eine Transaktion, die Datenbank/SQL verwendet, festgeschrieben oder zurückgesetzt wurde, ohne eine auszulösen Fehler?
Antwort:
Um den Transaktionsstatus zu erkennen, befolgen Sie die folgenden Best Practices:
1. Behalten Sie Transaktionen innerhalb von Funktionen bei:
Stellen Sie sicher, dass Begin(), Commit() und Rollback() innerhalb derselben Funktion aufgerufen werden. Dadurch wird sichergestellt, dass Transaktionen lückenlos nachverfolgt werden.
2. Nutzen Sie die Verzögerung für den Transaktionsabschluss:
Integrieren Sie eine Verzögerungsfunktion, um bei Bedarf ein Rollback durchzuführen. Dies garantiert eine ordnungsgemäße Transaktionsabwicklung.
3. Transaktionshandler für Prägnanz:
Implementieren Sie eine Transaktionshandlerfunktion, um Transaktionen zu kapseln und so Kürze und ordnungsgemäße Handhabung sicherzustellen.
Codebeispiel:
import "database/sql" func Transact(db *sql.DB, txFunc func(*sql.Tx) error) (err error) { tx, err := db.Begin() if err != nil { return } defer func() { if p := recover(); p != nil { tx.Rollback() panic(p) } else if err != nil { tx.Rollback() } else { err = tx.Commit() } }() err = txFunc(tx) return err }
Mit der Transaktion Handler:
func (s Service) DoSomething() error { return Transact(s.db, func(tx *sql.Tx) error { if _, err := tx.Exec(...); err != nil { return err } if _, err := tx.Exec(...); err != nil { return err } return nil }) }
Umgang mit Panikattacken:
Verwenden Sie „recover()“, um Panikattacken zu erfassen und einen rechtzeitigen Rollback sicherzustellen. Lösen Sie die Panik erneut aus, um die Bearbeitung zu ermöglichen, wenn dies erwartet wird.
GC- und Tx-Objekt:
Das Setzen von Tx auf Null nach dem Commit oder Rollback gibt nicht automatisch Speicher frei . Verlassen Sie sich stattdessen darauf, dass der Garbage Collector dies erledigt.
Das obige ist der detaillierte Inhalt vonWie kann ich den Status einer Datenbank-/SQL-Transaktion sicher und fehlerfrei ermitteln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!