> 백엔드 개발 > Golang > Go에서 `db.Exec()` 및 준비된 명령문을 언제, 왜 사용해야 합니까?

Go에서 `db.Exec()` 및 준비된 명령문을 언제, 왜 사용해야 합니까?

Mary-Kate Olsen
풀어 주다: 2024-12-07 22:37:15
원래의
988명이 탐색했습니다.

When and Why Should I Use `db.Exec()` and Prepared Statements in Go?

Golang에서 *DB.exec()나 준비된 문을 왜 사용하나요?

"왜 db.Exec()을 사용하나요?"

그동안 동일한 SQL 문에 대해 db.Exec와 db.Query를 교대로 사용할 수 있지만 결과는 서로 다릅니다. db.Exec는 영향을 받은 행 수를 반환하고(드라이버에서 지원하는 경우) db.Query는 행 객체를 반환합니다.

예를 들어 DELETE 문에서 삭제된 행 수를 계산하려면 다음을 수행하세요.

res, err := db.Exec(`DELETE FROM my_table WHERE expires_at = `, time.Now())
numDeleted, err := res.RowsAffected() // Returns the number of deleted rows
로그인 후 복사

또는(그러나 덜 효율적):

rows, err := db.Query(`DELETE FROM my_table WHERE expires_at =  RETURNING *`, time.Now())
numDeleted := 0
for rows.Next() { numDeleted++ } // Iterate over deleted rows
로그인 후 복사

db.Exec는 다음과 같은 경우에도 사용해야 합니다. 쿼리 결과는 필요하지 않고 오류 확인만 필요합니다.

if _, err := db.Exec(`<my_sql_query>`); err != nil { panic(err) }
로그인 후 복사

"또는 Golang의 준비된 문?"

Go가 항상 준비된 문을 내부적으로 사용한다는 문서의 주장은 그렇지 않을 수도 있습니다. 정확하다. 드라이버 구현은 각 db.Query 호출에 대해 새로운 준비된 문이 생성되는지 여부를 결정하는 것으로 보입니다.

그러나 db.Prepare를 수동으로 호출하고 결과 db.Stmt를 캐싱하면 자주 실행되는 쿼리의 성능을 향상시킬 수 있습니다. 자세한 내용은 PostgreSQL 설명서를 참조하세요: https://www.postgresql.org/docs/current/static/sql-prepare.html

위 내용은 Go에서 `db.Exec()` 및 준비된 명령문을 언제, 왜 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿