>  기사  >  백엔드 개발  >  golang mysql 쿼리

golang mysql 쿼리

WBOY
WBOY원래의
2023-05-19 13:27:09684검색

Golang은 대량의 데이터를 처리하고 높은 동시성 성능을 발휘하는 데 탁월한 프로그래밍 언어로 점점 인기를 얻고 있습니다. 동시에 인기 있는 관계형 데이터베이스 시스템인 MySQL은 Golang과 매우 호환됩니다. 이 기사에서는 Golang에서 MySQL 쿼리를 실행하는 방법을 살펴보겠습니다.

  1. MySQL 드라이버 설치

Golang을 사용하여 MySQL을 쿼리하기 전에 먼저 MySQL 드라이버를 설치해야 합니다. Golang에서 가장 일반적으로 사용되는 MySQL 드라이버는 "mysql"이며 다음 명령을 통해 설치할 수 있습니다.

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

이 명령은 Golang 환경에 mysql 드라이버를 설치합니다.

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

MySQL 쿼리를 수행하기 전에 먼저 데이터베이스와의 연결을 설정해야 합니다. 다음 코드를 사용하여 MySQL 데이터베이스에 대한 연결을 설정할 수 있습니다.

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

func main() {
    db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/database")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()
}

위 코드에서는 "sql.Open" 함수를 사용하여 다음 매개변수와 함께 Golang에서 MySQL 데이터베이스를 엽니다.

  • 첫 번째 매개변수 : 드라이버를 사용하는 데이터베이스를 지정합니다. 여기는 "mysql"
  • 두 번째 매개변수: "username:password@tcp(host:port)/database_name"

    • username 형식으로 MySQL 데이터베이스의 연결 정보를 지정합니다. MySQL 데이터베이스의 사용자 이름
    • password: MySQL 데이터베이스의 비밀번호
    • host:port: MySQL 데이터베이스의 호스트 및 포트 번호
    • database_name: MySQL 데이터베이스의 이름

실행 후 쿼리의 경우 연결을 닫으려면 "db.Close()" 문도 전달해야 합니다.

  1. SELECT 쿼리 실행

연결이 설정된 후 Golang을 사용하여 MySQL 쿼리를 실행할 수 있습니다. 다음은 SELECT 쿼리 문을 실행하는 간단한 샘플 코드입니다.

rows, err := db.Query("SELECT name, age FROM users WHERE age > ?", 20)
if err != nil {
    panic(err.Error())
}
defer rows.Close()

for rows.Next() {
    var name string
    var age int
    err = rows.Scan(&name, &age)
    if err != nil {
        panic(err.Error())
    }
    fmt.Println(name, age)
}
  • "db.Query" 함수는 SQL 쿼리 문과 해당 매개 변수를 받아들이고 결과 집합을 반환합니다.
  • "rows.Next"는 각 행을 반복합니다. "rows .Scan" 함수는 데이터의 각 행을 변수로 스캔합니다
  • 쿼리를 완료한 후 "rows.Close" 함수를 호출하여 결과 집합의 반복자를 닫아야 합니다
  1. INSERT를 수행합니다. UPDATE, DELETE 연산

Golang에서 INSERT, UPDATE, DELETE 등의 연산을 실행하는 것은 기본적으로 SELECT 연산을 실행하는 것과 같습니다. 다음은 샘플 코드입니다.

result, err := db.Exec("INSERT INTO users (name, age) VALUES (?, ?)", "John", 25)
if err != nil {
    panic(err.Error())
}
lastInsertId, _ := result.LastInsertId()
rowsAffected, _ := result.RowsAffected()
fmt.Printf("LastInsertId: %d, RowsAffected: %d
", lastInsertId, rowsAffected)
  • "db.Exec" 함수는 SQL 작업 문과 해당 매개변수를 MySQL 데이터베이스에 전달합니다.
  • "result.LastInsertId()" 함수는 삽입된 데이터의 기본 키 ID를 반환합니다
  • "result.RowsAffected() "함수는 영향을 받은 행 수를 반환합니다
  1. 준비된 문 사용

Golang에서는 준비된 문을 사용하여 MySQL 쿼리를 실행할 수 있습니다. 준비된 문은 여러 개의 동일한 쿼리 문을 실행할 때 MySQL 서버가 동일한 쿼리 문을 캐시하여 SQL 문을 컴파일하는 오버헤드를 줄일 수 있으므로 쿼리 성능을 향상시킬 수 있습니다. 다음은 준비된 문을 사용하는 예입니다.

stmt, err := db.Prepare("SELECT name, age FROM users WHERE age > ?")
if err != nil {
    panic(err.Error())
}
defer stmt.Close()

rows, err := stmt.Query(20)
if err != nil {
    panic(err.Error())
}
defer rows.Close()

for rows.Next() {
    var name string
    var age int
    err = rows.Scan(&name, &age)
    if err != nil {
        panic(err.Error())
    }
    fmt.Println(name, age)
}
  • "db.Prepare" 함수는 쿼리 문을 준비된 문 개체로 컴파일합니다.
  • 준비된 개체에서 "?"는 매개변수 자리 표시자를 나타내는 데 사용됩니다. "db.Query", "stmt.Query" 함수를 사용하여 전처리된 쿼리를 수행할 수 있습니다.
보안 고려 사항
  1. MySQL 쿼리를 만들 때 보안은 매우 중요합니다. Golang은 다음을 포함하여 MySQL 쿼리 사용에 대한 몇 가지 모범 사례를 제공합니다.

SQL 문을 작성하기 위해 문자열 연결을 사용하지 마십시오. 준비된 명령문과 매개변수 자리 표시자를 사용해야 합니다.
  • 사용자 입력 쿼리 문에서 동적으로 빌드하지 마십시오. 데이터베이스
  • SQL 주입 공격을 방지하려면 입력 데이터를 이스케이프하거나 매개 변수화해야 합니다.
  • 위의 모범 사례를 따르면 SQL 주입과 같은 공격의 위험을 줄일 수 있습니다.

결론

이 글에서는 Golang에서 MySQL 쿼리를 실행하는 방법을 살펴보았습니다. 기본 연결 방법과 구문을 이해한 후에는 Golang을 사용하여 MySQL 데이터베이스를 쿼리하고 모범 사례를 사용하여 쿼리 보안을 보장할 수 있습니다. MySQL 쿼리에 Golang을 사용할 때는 항상 보안 문제를 염두에 두십시오.

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

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