目次
서문
Go언어(고랭)는 성능과 효율성으로 인해 백엔드 개발에서 인기를 얻고 있습니다. 이 글에서는 Go언어를 사용하여 MySQL의 부모 테이블과 자식 테이블에 동시에 데이터를 입력하는 방법을 sqlx 라이브러리를 사용하여 탐구합니다. 이 가이드에는 초보자부터 중급 프로그래머에게 적합한 다양한 코드 예시가 포함되어 있습니다.
기본 개념
Go언어에서 데이터베이스 작업을 수행할 때의 기본 개념을 간단히 살펴보겠습니다. sqlx 라이브러리는 표준 database/sql 패키지의 기능을 확장하여 더 직관적이고 사용자 친화적인 API를 제공합니다.
부모 테이블에 데이터 입력
코드 예시 1: 간단한 INSERT 문
type Parent struct {
ID int `db:"id"`
Name string `db:"name"`
}
// 부모 테이블에 데이터 입력
func InsertParent(db *sqlx.DB, p Parent) error {
query := `INSERT INTO parent (name) VALUES (:name)`
_, err := db.NamedExec(query, p)
return err
}
설명
이 코드에서는 Parent
구조체를 사용하여 부모 테이블에 데이터를 삽입합니다. sqlx의 NamedExec
메소드를 사용하면 구조체의 필드 이름을 테이블의 열 이름에 매핑할 수 있습니다.
자식 테이블에 데이터 입력
코드 예시 2: 트랜잭션을 사용한 INSERT 문
type Child struct {
ID int `db:"id"`
ParentID int `db:"parent_id"`
Name string `db:"name"`
}
// 자식 테이블에 데이터 입력
func InsertChild(db *sqlx.DB, c Child) error {
tx, err := db.Beginx()
if err != nil {
return err
}
query := `INSERT INTO child (parent_id, name) VALUES (:parent_id, :name)`
_, err = tx.NamedExec(query, c)
if err != nil {
tx.Rollback()
return err
}
return tx.Commit()
}
설명
여기서는 트랜잭션을 사용하여 자식 테이블에 데이터를 삽입합니다. 이 방법은 데이터 무결성을 보장하면서 안전하게 데이터를 삽입할 수 있습니다.
부모와 자식 테이블에 동시에 데이터 입력
코드 예시 3: 부모-자식 관계를 활용한 데이터 삽입
// 부모와 자식 테이블에 동시에 데이터 입력
func InsertParentAndChild(db *sqlx.DB, p Parent, c Child) error {
// 부모 테이블에 삽입
if err := InsertParent(db, p); err != nil {
return err
}
// 자식 테이블에 삽입
c.ParentID = p.ID // 부모 테이블의 ID 설정
if err := InsertChild(db, c); err != nil {
return err
}
return nil
}
설명
이 코드에서는 먼저 부모 테이블에 데이터를 삽입한 후, 그 ID를 사용하여 자식 테이블에 데이터를 삽입합니다. 이 방법을 통해 관련 데이터를 효율적으로 데이터베이스에 저장할 수 있습니다.
결론
Go언어, MySQL, sqlx를 사용하여 부모와 자식 테이블에 데이터를 효율적으로 삽입하는 방법을 소개했습니다. 이 예시들은 실제 프로젝트에서 데이터베이스 작업에 대한 이해를 깊게 하는 데 도움이 될 것입니다.