Golang kết nối với CSDL MySQL

Điều kiện cần

  • Đã biết cài đặt môi trường phát triển và lập trình căn bản với Golang
  • Đã biết cài đặt và sử dụng CSDL MySQL
  • Có hiểu biết về hệ quản trị CSDL Quan hệ và biết cách sử dụng SQL để thao tác với dữ liệu

Tạo dự án

Chúng ta bắt đầu bằng cách đơn giản tạo một thư mục cho dự án của mình và một tệp có tên "main.go" bên trong đó. Có thể sử dụng bằng lệnh sau

mkdir connect-to-mysql && cd connect-to-mysql && touch main.go

Trình điều khiển cơ sở dữ liệu

Chúng ta sẽ sử dụng trình điều khiển MySQL để kết nối với cơ sở dữ liệu của chúng ta. Lý do chúng ta làm điều này là vì trình điều khiển xử lý rất nhiều thứ cần thiết để giao tiếp với cơ sở dữ liệu của chúng ta.

Để có được trình điều khiển, chỉ cần chạy lệnh sau:

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

Khởi tạo mã

Bây giờ chúng ta sẽ viết một số mã ban đầu cũng như nhập các gói cần thiết.

main.go

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

func main() {
  
}

Truy cập vào CSDL

Để truy cập cơ sở dữ liệu của chúng tôi và tạo một đối tượng cơ sở dữ liệu mới, chúng ta sử dụng mã lệnh sau:

db, err := sql.Open("mysql", "<user>:<password>@tcp(127.0.0.1:3306)/<database-name>")

Mã này tạo một đối tượng cơ sở dữ liệu mới. Đối số đầu tiên trong hàm Open() là tên trình điều khiển của chúng ta, trong trường hợp này là "mysql". Đối số thứ hai là cú pháp dành riêng cho trình điều khiển cho biết trình điều khiển cách truy cập kho dữ liệu bên dưới. Ngoài ra, cổng mặc định cho MySQL là 3306 nên đó là những gì chúng ta sử dụng.

Bạn có thể nghĩ rằng điều này mở ra một kết nối đến cơ sở dữ liệu của chúng ta, nhưng nó không.Nó chỉ tạo một đối tượng cơ sở dữ liệu và chuẩn bị để sử dụng sau này, kết nối đầu tiên diễn ra khi chúng ta cần nó. Ví dụ khi chúng tôi thực hiện một truy vấn cho dữ liệu.

Chúng ta viết mã sau vào tệp "main.go", chỉ cần thay thế <user> bằng người dùng của bạn, <password> bằng mật khẩu của người dùng và <database-name> bằng tên cơ sở dữ liệu của bạn.

main.go

package main
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-name>") 
  if err != nil {
    panic(err.Error())
  }
  defer db.Close()
}

Điều này sẽ như tôi đã viết trước khi tạo một đối tượng cơ sở dữ liệu và chuẩn bị nó để sử dụng sau này, ngay sau khi chúng ta kiểm tra lỗi. Kiểm tra lỗi là điều bạn hầu như luôn muốn làm.

Dòng tiếp theo mà chúng ta "trì hoãn" (defer db.Close()) chỉ đơn giản là giữ kết nối mở cho đến phần còn lại của hàm.

Chạy chương trình để đảm bảo rằng không có bất kỳ lỗi nào với lệnh sau:

go build && ./connect-to-mysql

Kiểm tra tồn tại CSDL

Để kiểm tra CSDL có tồn tại hay không ta có thể thực hiện với mã lệnh sau:

err = db.Ping()
if err != nil {
  fmt.Println("Ping Failed!!")
}

main.go

package main
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-name>") 
  if err != nil {
    panic(err.Error())
  }
  defer db.Close()

  err = db.Ping()
  if err != nil {
    fmt.Println("Ping Failed!!")
  } else {
    fmt.Println("Successful database connection")
  }
}

Bây giờ bạn có thể chạy chương trình để kiểm tra có thực sự kết nối được với CSDL của bạn hay không:

go build && ./connect-to-mysql