>  기사  >  데이터 베이스  >  Go 언어를 사용하여 MySQL 데이터베이스에서 데이터를 추출하는 방법

Go 언어를 사용하여 MySQL 데이터베이스에서 데이터를 추출하는 방법

PHPz
PHPz원래의
2023-06-17 22:21:08920검색

MySQL은 매우 인기 있는 관계형 데이터베이스이며, Go 언어는 빠르게 발전하는 프로그래밍 언어입니다. 이 두 언어를 결합하면 편리하고 효율적인 데이터 추출이 가능합니다. 이 기사에서는 Go 언어를 사용하여 MySQL 데이터를 추출하는 방법을 소개합니다. 이것이 모든 사람에게 영감을 주고 도움이 되기를 바랍니다.

1. MySQL 드라이버 설치 및 구성

Go 언어를 사용하여 MySQL 데이터를 추출하기 전에 먼저 MySQL 드라이버를 설치해야 합니다. MySQL 드라이버에는 다양한 선택이 있습니다. 여기서는 가장 일반적으로 사용되는 두 가지 드라이버인 go-sql-driver와 mysql 드라이버를 소개합니다.

go-sql-driver를 사용하여 설치하려면 다음 명령을 사용하면 됩니다.

go get -u github.com/go-sql-driver/mysql

mysql 드라이버를 사용하여 설치하려면 다음 명령을 사용하면 됩니다.

go get -u github.com/mysql/mysql-go

설치가 완료된 후 해당 드라이버 패키지를 다음 폴더로 가져옵니다. 예를 들어 :

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

그러나 MySQL 드라이버를 사용할 때 MySQL을 구성해야 한다는 점에 유의해야 합니다. 구체적인 방법은 다음과 같습니다.

  1. MySQL의 문자 집합을 utf8mb4로 설정

버전에서 MySQL 5.7.7 이전 버전에서는 기본 문자 집합이 utf8로, 3바이트 유니코드 문자만 지원합니다. 5.7.7 이상 버전에서는 기본적으로 4바이트 유니코드 문자를 지원하는 utf8mb4 문자 집합을 변경할 수 있습니다. 구성 파일 my.cnf 또는 my.ini의 문자 집합 서버는 중국어와 같은 특수 문자를 지원하는 효과를 얻기 위해 utf8mb4로 설정됩니다.

  1. binlog 로그 활성화

MySQL에서 binlog 로그는 MySQL에서 작동하는 모든 SQL 문을 기록합니다. 따라서 데이터를 추출할 때 실시간 데이터 동기화를 위해 binlog 로그를 활성화해야 합니다. my.cnf 또는 my.ini에서 구성하고 활성화할 수 있습니다.

2. MySQL 데이터베이스에 연결

MySQL 드라이버를 설치하고 적절하게 구성한 후 다음으로 MySQL 데이터베이스에 연결해야 합니다. MySQL 데이터베이스에 접속하는 방법은 다음과 같습니다.

db, err := sql.Open("mysql", "user:password@tcp(ip:port)/database")

그 중 user와 비밀번호는 MySQL 사용자 이름과 비밀번호, ip와 port는 MySQL 접속 주소와 포트 번호, 그리고 데이터베이스는 접속할 데이터베이스입니다.

MySQL 데이터베이스에 성공적으로 연결되면 MySQL의 데이터를 Go 언어로 읽거나 Go 언어의 데이터를 MySQL에 저장하는 등 해당 데이터 작업을 수행할 수 있습니다.

3. SQL 문 쿼리

SQL 문을 사용하여 Go 언어로 MySQL의 데이터를 쿼리하는 것은 매우 간단합니다. sql.Query 함수를 사용하여 쿼리 문을 실행하고 결과를 다음과 같이 행 개체에 저장할 수 있습니다.

rows, err := db.Query("SELECT * FROM table1")

실행이 성공적으로 완료되면 행 개체의 Next 함수를 사용하여 결과를 탐색할 수 있으며, 매번 하나의 레코드를 꺼내서 캡슐화할 수 있습니다. 해당 구조체 개체에:

type Product struct {
    ID         int64  `db:"id"`
    Name       string `db:"name"`
    Price      int64  `db:"price"`
    CreateTime int64  `db:"create_time"`
}

func main() {
    rows, err := db.Query("SELECT * FROM product")  // 查询product表
    if err != nil {
        panic(err)
    }

    defer rows.Close()

    products := make([]Product, 0)

    for rows.Next() {  // 遍历结果集
        var p Product
        err = rows.Scan(&p.ID, &p.Name, &p.Price, &p.CreateTime)  // 将一条记录封装到Product对象中
        if err != nil {
            panic(err)
        }
        products = append(products, p)
    }
}

sql.QueryRow 함수를 사용하여 단일 레코드를 쿼리하는 방법도 매우 간단합니다.

var p Product
err := db.QueryRow("SELECT * FROM product WHERE id=?", 1).Scan(&p.ID, &p.Name, &p.Price, &p.CreateTime)
if err != nil {
    panic(err)
}

4데이터 삽입도 매우 간단합니다. Go 언어를 사용하여 MySQL에 데이터를 삽입합니다. 이를 달성하기 위해 sql.Exec 함수를 사용하여 SQL 문을 실행할 수 있습니다.

stmt, err := db.Prepare("INSERT INTO product(name, price) VALUES(?,?)")
if err != nil {
    panic(err)
}

res, err := stmt.Exec("Product1", 100)
if err != nil {
    panic(err)
}

위 코드의 준비 함수는 SQL 문을 준비하는 데 사용된 다음 Exec 함수를 사용하여 SQL 문을 실행하고 결과를 반환합니다. . 실행이 성공하면 반환된 결과에는 삽입된 데이터의 ID(있는 경우)가 포함되며, 이는 LastInsertId 함수를 사용하여 얻을 수 있습니다. 영향을 받은 행 수를 가져와야 하는 경우 RowsAffected 함수를 사용할 수 있습니다.

5. 데이터 업데이트 및 삭제

데이터 삽입과 마찬가지로 Go 언어도 sql.Exec 함수를 사용하여 다음과 같이 SQL 업데이트 문 및 삭제 문을 실행할 수 있습니다.

// 执行更新操作
stmt, err := db.Prepare("UPDATE product SET price=? WHERE id=?")
if err != nil {
    panic(err)
}

res, err := stmt.Exec(200, 1)
if err != nil {
    panic(err)
}

// 执行删除操作
stmt, err = db.Prepare("DELETE FROM product WHERE id=?")
if err != nil {
    panic(err)
}

res, err = stmt.Exec(1)
if err != nil {
    panic(err)
}

6. 트랜잭션 관리

, 때로는 데이터의 원자성을 보장해야 하는 경우가 있습니다. 즉, 모든 데이터베이스 작업이 성공하거나 실패합니다. 이 시점에서 우리는 이를 달성하기 위해 트랜잭션 관리 메커니즘을 사용할 수 있습니다.

Go 언어에서는 db.Begin 및 tx.Commit을 사용하여 다음과 같이 트랜잭션을 열고 제출할 수 있습니다.

tx, err := db.Begin()
if err != nil {
    panic(err)
}

stmt, err := tx.Prepare("INSERT INTO product(name, price) VALUES(?,?)")
if err != nil {
    panic(err)
}

res, err := stmt.Exec("Product1", 100)
if err != nil {
    tx.Rollback()
    panic(err)
}

stmt, err = tx.Prepare("INSERT INTO product(name, price) VALUES(?,?)")
if err != nil {
    panic(err)
}

res, err = stmt.Exec("Product2", 200)
if err != nil {
    tx.Rollback()
    panic(err)
}

// 提交事务
err = tx.Commit()
if err != nil {
    tx.Rollback()
    panic(err)
}

위 코드에서는 트랜잭션을 연 후 트랜잭션에서 여러 SQL 작업을 수행할 수 있습니다. 모든 SQL 작업을 실행하고 모든 SQL 작업의 원자성을 확인한 후에는 Commit() 함수를 사용하여 트랜잭션을 커밋해야 합니다. SQL 작업에서 오류가 발생하면 Rollback() 함수를 사용하여 트랜잭션을 롤백할 수 있습니다.

7. 결론

이 기사에서는 Go 언어를 사용하여 MySQL 데이터베이스에서 데이터를 추출하는 방법을 소개합니다. 위의 소개를 통해 Go 언어를 사용하여 MySQL 데이터베이스에서 데이터 작업을 수행하는 것이 매우 편리하고 효율적이라는 것을 알 수 있습니다. 데이터베이스 작업에 Go 언어를 사용해 본 적이 없다면 사용해 보는 것이 좋을 것입니다.

위 내용은 Go 언어를 사용하여 MySQL 데이터베이스에서 데이터를 추출하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.