>백엔드 개발 >Golang >golang 쿼리 mysql

golang 쿼리 mysql

WBOY
WBOY원래의
2023-05-21 16:52:371017검색

현대 소프트웨어 개발에서 대량의 데이터를 처리하는 것은 매우 일반적인 작업입니다. 가장 일반적인 데이터베이스 중 하나인 MySQL에 이 데이터를 저장하고 쿼리하는 것은 프레임워크 개발자에게 필수적인 기술 중 하나입니다. 이 기사에서는 Google이 개발한 프로그래밍 언어인 Golang을 사용하여 MySQL을 쿼리하는 방법과 오픈 소스 타사 라이브러리를 사용하여 데이터를 연결, 쿼리 및 관리하는 방법을 살펴보겠습니다.

MySQL 쿼리에 Golang을 사용하는 이유는 무엇인가요?

Golang은 고성능 네트워킹 및 동시 애플리케이션을 구축하는 데 널리 사용되는 빠르고 안정적이며 확장 가능한 오픈 소스 프로그래밍 언어입니다. 효율적인 메모리 관리 및 정적 유형 검사로 인해 Golang은 대량의 동시 읽기 및 쓰기, 계산 집약적인 작업 및 대규모 데이터 처리 작업을 처리하는 데 적합합니다.

MySQL은 대규모 데이터를 저장하는 데 자주 사용되는 관계형 데이터베이스입니다. 장점에는 유연한 데이터 구조, 우수한 데이터 무결성 및 높은 확장성이 포함됩니다. 표준 SQL 언어를 지원할 뿐만 아니라 다양한 데이터 쿼리 및 연결 방법도 지원합니다.

따라서 Golang과 MySQL을 결합하면 양쪽 모두의 이점을 얻을 수 있으며 데이터 저장 및 쿼리와 같은 최신 애플리케이션에 매우 좋은 선택입니다. Golang에는 또한 선택할 수 있는 많은 타사 라이브러리가 있습니다. 이를 통해 MySQL 데이터베이스를 연결, 쿼리 및 관리할 수 있어 MySQL 데이터베이스 쿼리가 더욱 편리해집니다. 다음으로 타사 라이브러리인 Go-MySQL-Driver를 사용하여 MySQL 데이터베이스에 연결하는 방법을 설명합니다.

Go-MySQL-Driver를 사용하여 MySQL 쿼리

Go-MySQL-Driver는 MySQL을 연결하고 운영하는 데 사용되는 Golang의 인기 있는 오픈 소스 라이브러리입니다. MySQL 인스턴스에 쉽게 연결하고 효율적인 데이터 쿼리 작업을 수행할 수 있는 간단한 API를 제공합니다. 이러한 작업에는 기존 데이터 선택, 삽입, 삭제 및 업데이트 등이 포함됩니다. 다음은 Go-MySQL-Driver를 사용하여 MySQL 데이터베이스에 연결하고 쿼리하는 방법을 자세히 소개합니다.

1단계: Go-MySQL-Driver 라이브러리 설치

Go-MySQL-Driver 사용을 시작하려면 먼저 Golang 프로젝트에 Go-MySQL-Driver 라이브러리를 설치해야 합니다. 다음 명령을 사용하여 프로젝트에 Go-MySQL-Driver를 설치합니다.

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

2단계: MySQL 서버에 연결하고 데이터 가져오기

Go-MySQL-Driver 라이브러리가 설치되면 다음 코드 조각을 사용하여 연결할 수 있습니다. MySQL 서버. 다음은 간단한 예입니다.

package main

import (
    "database/sql"
    "fmt"

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

func main() {
    // 打开数据库连接,创建一个 db 变量
    // 第一个参数:指定使用 mysql 协议来连接数据库
    // 第二个参数:root 是 MySQL 的超级管理员账户名称
    // 第三个参数:mypass 是 MySQL 的管理员账户密码
    // 第四个参数:localhost 是 MySQL 数据库服务器的主机地址
    // 第五个参数:3306 是 MySQL 数据库服务器的端口号
    db, err := sql.Open("mysql", "root:mypass@tcp(localhost:3306)/")

    // 检查是否连接成功
    if err != nil {
        panic(err.Error())
    }

    // 关闭数据库连接
    defer db.Close()
    
    // 定义一个查询语句并执行
    rows, err := db.Query("SELECT name, age FROM users")
    if err != nil {
        panic(err.Error())
    }
    defer rows.Close()

    // 打印查询结果
    for rows.Next() {
        var name string
        var age int
        if err := rows.Scan(&name, &age); err != nil {
            panic(err.Error())
        }
        fmt.Printf("Name: %s, Age: %d
", name, age)
    }
}

이 예에서는 먼저 sql.Open 함수를 사용하여 MySQL 데이터베이스 인스턴스에 대한 연결을 엽니다. db 변수는 MySQL 데이터베이스에서 작업을 수행하는 데 필요한 기타 정보를 저장하는 연결 핸들을 나타냅니다. sql.Open 函数打开与 MySQL 数据库实例的连接。db 变量代表着一个连接句柄,它存储了其他在MySQL数据库中执行的任何操作都需要使用的信息。

一旦连接建立,我们使用 db.Query 函数来查询数据库。该函数用于执行SQL查询,返回一个 sql.Rows 结构。sql.Rows 是一个结果集,用于迭代执行结果。

在本例中,我们执行了一个非常简单的 SQL 查询语句 "SELECT name, age FROM users",并使用 .Scan 方法将结果存储在相应的变量中,然后对结果进行迭代并打印。

步骤3:执行 INSERT、UPDATE 和 DELETE 操作

除了查询,Go-MySQL-Driver 还提供了 API 用于执行 INSERT、UPDATE 和 DELETE 操作。以下是一个例子:

package main

import (
    "database/sql"
    "fmt"

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

func main() {
    db, err := sql.Open("mysql", "root:mypass@tcp(localhost:3306)/")
    if err != nil {
        panic(err.Error())
    }

    // 关闭数据库连接
    defer db.Close()

    // 准备一个语句,对数据表进行插入操作
    stmt, err := db.Prepare("INSERT INTO users(name, age) VALUES(?, ?)")
    if err != nil {
        panic(err.Error())
    }

    // 插入数据
    res, err := stmt.Exec("Tom", 20)
    if err != nil {
        panic(err.Error())
    }

    // 获取插入数据的上一条语句的 ID
    id, err := res.LastInsertId()
    if err != nil {
        panic(err.Error())
    }

    fmt.Printf("Inserted record with ID %d
", id)
}

这个示例演示了如何使用 db.Prepare 创建一个预编译的语句,该语句将在后续的执行中插入具体的信息。

本例使用的是 ? 占位符,如上所述,而不是在 SQL 语句中引用实际的变量。它们会在 stmt 执行时被替换。此方法有助于避免SQL注入的可能性。

stmt 准备好后,我们将数据输入到 stmt 中,使用 stmt.Exec() 方法将其插入。stmt.Exec() 方法将返回结果 sql.Result,其中包括受影响的行数和最后插入行的 ID。

在本例中,我们使用 res.LastInsertId()

연결이 설정되면 db.Query 함수를 사용하여 데이터베이스를 쿼리합니다. 이 함수는 SQL 쿼리를 실행하는 데 사용되며 sql.Rows 구조를 반환합니다. sql.Rows는 실행 결과를 반복하는 데 사용되는 결과 집합입니다.

이 예에서는 매우 간단한 SQL 쿼리 문 "SELECT name, age FROM users"를 실행하고 .Scan 메서드를 사용하여 해당 변수에 결과를 저장했습니다. , 결과를 반복하여 인쇄합니다.

3단계: INSERT, UPDATE 및 DELETE 작업 수행

Go-MySQL-Driver는 쿼리 외에도 INSERT, UPDATE 및 DELETE 작업을 수행하기 위한 API도 제공합니다. 예는 다음과 같습니다.

rrreee

이 예는 db.Prepare를 사용하여 후속 실행에 특정 정보를 삽입할 준비된 문을 만드는 방법을 보여줍니다. 🎜🎜이 예에서는 SQL 문에서 실제 변수를 참조하는 대신 위에서 언급한 ? 자리 표시자를 사용합니다. stmt가 실행되면 교체됩니다. 이 방법은 SQL 삽입 가능성을 방지하는 데 도움이 됩니다. 🎜🎜stmt가 준비되면 stmt에 데이터를 입력하고 stmt.Exec() 메서드를 사용하여 삽입합니다. stmt.Exec() 메서드는 영향을 받은 행 수와 마지막으로 삽입된 행의 ID를 포함하는 sql.Result 결과를 ​​반환합니다. 🎜🎜이 예에서는 res.LastInsertId() 메서드를 사용하여 ID를 검색합니다. 🎜🎜결론🎜🎜위는 Golang과 Go-MySQL-Driver를 사용하여 MySQL을 쿼리하는 간단한 예입니다. 예를 들어, Golang과 MySQL을 결합하면 더 많은 작업을 수행할 수 있을 것으로 예상할 수 있으며, 추상적인 다중 계층 애플리케이션에서 이 조합을 사용하면 많은 수의 데이터 저장 및 쿼리 작업을 효율적으로 처리할 수 있습니다. 🎜🎜 물론 Go-MySQL-Driver가 MySQL을 연결하고 운영하는 유일한 방법은 아닐 수도 있습니다. Golang에는 SQLX, GORM 등을 포함한 풍부한 타사 라이브러리가 있습니다. 이를 위해서는 특정 상황을 분석하고 사용에 가장 적합한 라이브러리를 선택해야 합니다. 🎜🎜마지막으로, 이 기사에 제공된 정보를 다음 MySQL 프로젝트에 통합하여 Golang과 MySQL의 성능을 발휘할 수 있기를 바랍니다. 🎜

위 내용은 golang 쿼리 mysql의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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