database/sql Tx: Detecting Transaction Status
질문:
어떻게 확인할 수 있나요? 데이터베이스/SQL을 사용하는 트랜잭션이 커밋되었는지 또는 트리거 없이 롤백되었는지 여부 오류가 발생했나요?
답변:
거래 상태를 감지하려면 다음 모범 사례를 따르세요.
1. 함수 내에서 트랜잭션 유지:
Begin(), Commit() 및 Rollback()이 동일한 함수 내에서 호출되는지 확인하세요. 이를 통해 거래가 원활하게 추적될 수 있습니다.
2. 트랜잭션 종료를 위해 연기 활용:
필요한 경우 롤백을 수행하는 연기 기능을 통합합니다. 이를 통해 올바른 거래 처리가 보장됩니다.
3. 간결성을 위한 트랜잭션 핸들러:
트랜잭션을 캡슐화하여 간결성과 적절한 처리를 보장하는 트랜잭션 핸들러 기능을 구현합니다.
코드 예:
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 }
거래 이용 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 }) }
패닉 처리:
recover()를 사용하여 패닉을 포착하고 시기적절한 롤백을 보장합니다. 예상되는 경우 처리를 허용하도록 패닉을 다시 발생시킵니다.
GC 및 Tx 개체:
커밋 또는 롤백 후에 Tx를 nil로 설정해도 메모리가 자동으로 확보되지 않습니다. . 대신 가비지 수집기에 의존하여 이 문제를 처리하세요.
위 내용은 오류 없이 데이터베이스/SQL 트랜잭션의 상태를 안전하게 확인할 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!