Go언어, MySQL, sqlx를 사용한 부모-자식 테이블 데이터 효율적 입력 방법

서문

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를 사용하여 부모와 자식 테이블에 데이터를 효율적으로 삽입하는 방법을 소개했습니다. 이 예시들은 실제 프로젝트에서 데이터베이스 작업에 대한 이해를 깊게 하는 데 도움이 될 것입니다.

タイトルとURLをコピーしました