본문 바로가기
Golang

Golang mysql 사용/연동 하기

by 시바도지 2023. 8. 8.
반응형

Golang에서 mysql과 연동하기 위해 "database/sql"과 "github.com/go-sql-driver/mysql" 패키지를 import 해야한다.

 

"database/sql"은 golang의 데이터베이스 관련 인터페이스를 제공하고, DB연결, 쿼리 실행, 트랜잭션 등을 처리할 수 있다.

"github.com/go-sql-driver/mysql"은 mysql DB 드라이버를 구현한 패키지다.

 

 

 

사용 방법


 

터미널에서 다음의 명령어를 사용하여 패키지를 다운로드 한다. (이미 설치가 되어 있다면 생략)

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

 

 

예제 코드)

DB가 이미 생성되어 있다는 가정하에 진행

package main

import (
	"database/sql"
	"fmt"
	"log" // logging을 위해 사용, 필수는 아니지만 사용 권장
	_ "github.com/go-sql-driver/mysql" // 개발자가 드라이버 패키지를 직접 사용하지 않도록 _(언더바)를 alias를 준다.
)

func main() {
	// MySQL 데이터베이스 연결 정보
	db, err := sql.Open("mysql", "root:1234@tcp(localhost:3306)/schooldb") // DB 정보) id: root, pw: 1234, db name: schooldb
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	// 데이터베이스 연결 확인
	err = db.Ping()
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Connected to MySQL database!")

	// 쿼리 실행
	rows, err := db.Query("SELECT id, name FROM student") // 학생 테이블에서 id, name을 조회
	if err != nil {
		log.Fatal(err)
	}
	defer rows.Close()

	// 쿼리 결과 읽기
	for rows.Next() {
		var id int
		var name string
		err := rows.Scan(&id, &name)
		if err != nil {
			log.Fatal(err)
		}
		fmt.Printf("ID: %d, Name: %s\n", id, name)
	}
}

 

위의 예제는 복수개의 row를 반환할 경우의 쿼리 예제이다.

만약 하나의 row만을 반환할 경우 다음의 코드와 같다.

 

 

package main

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

func main() {
	// MySQL 데이터베이스 연결 정보
	db, err := sql.Open("mysql", "root:1234@tcp(localhost:3306)/schooldb")
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	// 데이터베이스 연결 확인
	err = db.Ping()
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Connected to MySQL database!")

	// 쿼리 실행
    var name string
	row, err := db.QueryRow("SELECT id, name FROM student WHERE id = 1").Scan(&name) // id가 1인 학생을 조회
	if err != nil {
		log.Fatal(err)
	}
	defer rows.Close()
    
    fmt.Println(name)
}

 

 

 

 

 

반응형

댓글