Giới thiệu
Go Lang (hay Golang) là một ngôn ngữ lập trình được phát triển bởi Google, nổi tiếng với hiệu suất cao, đơn giản và dễ bảo trì. Trong bài viết này, chúng ta sẽ khám phá cách sử dụng Go Lang để tương tác với hai hệ quản trị cơ sở dữ liệu phổ biến là PostgreSQL và MySQL.
Cài đặt driver cho PostgreSQL và MySQL
Trước khi bắt đầu, chúng ta cần cài đặt driver cho PostgreSQL và MySQL để Go Lang có thể kết nối và tương tác với cơ sở dữ liệu. Đối với PostgreSQL, chúng ta sử dụng driver "github.com/lib/pq", và đối với MySQL, chúng ta sử dụng driver "github.com/go-sql-driver/mysql". Cài đặt driver cho PostgreSQL và MySQL bằng các lệnh sau:
go get github.com/lib/pq
go get github.com/go-sql-driver/mysql
Kết nối đến cơ sở dữ liệu PostgreSQL và MySQL
Sau khi cài đặt driver cho PostgreSQL và MySQL, chúng ta có thể bắt đầu kết nối đến cơ sở dữ liệu. Đầu tiên, chúng ta import các gói cần thiết:
import ( "database/sql" "fmt" "log" _ "github.com/lib/pq" _ "github.com/go-sql-driver/mysql"
)
Sau đó, chúng ta có thể kết nối đến cơ sở dữ liệu PostgreSQL và MySQL bằng cách sử dụng hàm sql.Open(). Dưới đây là ví dụ về cách kết nối đến cơ sở dữ liệu PostgreSQL và MySQL, hãy chọn cách kết nối tương ứng với CSDL bạn đang làm:
func main() { // Kết nối PostgreSQL pgDB, err := sql.Open("postgres", "host=localhost port=5432 user=postgres password=your_password dbname=your_database sslmode=disable") if err != nil { log.Fatal(err) } defer pgDB.Close() // Kết nối MySQL mysqlDB, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/your_database") if err != nil { log.Fatal(err) } defer mysqlDB.Close() // Kiểm tra kết nối thành công err = pgDB.Ping() if err != nil { log.Fatal(err) } err = mysqlDB.Ping() if err != nil { log.Fatal(err) } fmt.Println("Kết nối thành công")
}
Trong ví dụ trên, chúng ta sử dụng hàm sql.Open() để kết nối đến cơ sở dữ liệu PostgreSQL và MySQL. Chúng ta chỉ cần thay đổi các thông tin kết nối như host, port, user, password, dbname để phù hợp với cấu hình của cơ sở dữ liệu của bạn. Hãy chắc chắn rằng bạn đã cung cấp đúng thông tin kết nối để kết nối thành công.
Sau khi kết nối, chúng ta sử dụng hàm Ping() để kiểm tra kết nối thành công đến cơ sở dữ liệu. Nhớ quan trọng là đảm bảo bạn đã cung cấp đúng thông tin kết nối để kết nối thành công.
Hãy chạy thử xem đã kết nối thành công hay chưa. Nếu có dòng Kết nối thành công
xuất hiện thì bạn đã xong, còn nếu xuất hiện lỗi ví dụ như:
2024/04/29 09:46:43 dial tcp 127.0.0.1:5432: connect: connection refused
exit status 1
Thì bạn cần kiểm tra lại phần kết nối đã điền chính xác thông tin hay chưa.
Tương tác với cơ sở dữ liệu PostgreSQL và MySQL
Sau khi kết nối thành công đến cơ sở dữ liệu PostgreSQL và MySQL, chúng ta có thể thực hiện các thao tác tương tác với cơ sở dữ liệu như truy vấn dữ liệu, chèn dữ liệu, cập nhật dữ liệu, và xóa dữ liệu.
Dưới đây là một ví dụ về cách thực hiện truy vấn dữ liệu từ PostgreSQL và MySQL, lưu ý các thông tin kết nối vẫn giữ nguyên ở bước trên nhé:
func main() { // Kết nối PostgreSQL pgDB, err := sql.Open("postgres", "host=localhost port=5432 user=postgres password=your_password dbname=your_database sslmode=disable") if err != nil { log.Fatal(err) } defer pgDB.Close() // Truy vấn dữ liệu từ PostgreSQL rows, err := pgDB.Query("SELECT id, email FROM users ORDER BY id LIMIT 10") 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.Println("ID:", id, "Name:", name) } // Kết nối MySQL mysqlDB, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/your_database") if err != nil { log.Fatal(err) } defer mysqlDB.Close() // Truy vấn dữ liệu từ MySQL rows, err = mysqlDB.Query("SELECT id, email FROM users ORDER BY id LIMIT 10") 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.Println("ID:", id, "Name:", name) }
}
Trong ví dụ trên, chúng ta sử dụng hàm Query() để thực hiện truy vấn dữ liệu từ bảng "users" trong cơ sở dữ liệu PostgreSQL và MySQL. Sau đó, chúng ta sử dụng hàm Scan() để đọc dữ liệu từ kết quả truy vấn và hiển thị kết quả ra màn hình.
Tương tự, chúng ta có thể sử dụng các hàm như Exec() để thực hiện các thao tác thêm mới, cập nhật và xóa dữ liệu trong cơ sở dữ liệu PostgreSQL và MySQL:
Thêm mới dữ liệu
// Thêm mới dữ liệu vào PostgreSQL _, err = pgDB.Exec("INSERT INTO users (name, email) VALUES ($1, $2)", "Nguyen Van A", "nguyen.van.a@example.com") if err != nil { log.Fatal(err) } // Thêm mới liệu vào MySQL _, err = mysqlDB.Exec("INSERT INTO users (name, email) VALUES (?, ?)", "Nguyen Van A", "nguyen.van.a@example.com") if err != nil { log.Fatal(err) }
Cập nhật dữ liệu
// Cập nhật dữ liệu trong PostgreSQL _, err = pgDB.Exec("UPDATE users SET email = $1 WHERE id = $2", "new_email@example.com", 1) if err != nil { log.Fatal(err) } // Cập nhật dữ liệu trong MySQL _, err = mysqlDB.Exec("UPDATE users SET email = ? WHERE id = ?", "new_email@example.com", 1) if err != nil { log.Fatal(err) }
Xóa dữ liệu
// Xóa dữ liệu từ PostgreSQL _, err = pgDB.Exec("DELETE FROM users WHERE id = $1", 1) if err != nil { log.Fatal(err) } // Xóa dữ liệu từ MySQL _, err = mysqlDB.Exec("DELETE FROM users WHERE id = ?", 1) if err != nil { log.Fatal(err) }
Trong các ví dụ trên, chúng ta sử dụng hàm Exec() để thực hiện các câu lệnh SQL như INSERT, UPDATE, DELETE
. Chúng ta truyền các giá trị dữ liệu vào câu lệnh SQL bằng cách sử dụng các tham số được đánh số $1, $2, ....
trong PostgreSQL và các tham số vị trí ?, ?, ...
trong MySQL. Các câu lệnh giữa PostgreSQL và MySQL gần như là giống nhau chỉ khác tham số mà thôi.
Kết luận
Trong bài viết này, chúng ta đã khám phá cách sử dụng Go Lang để tương tác với cơ sở dữ liệu PostgreSQL và MySQL. Chúng ta đã cài đặt driver cho PostgreSQL và MySQL, kết nối đến cơ sở dữ liệu và thực hiện các thao tác truy vấn dữ liệu. Việc sử dụng Go Lang cùng các driver hỗ trợ giúp chúng ta dễ dàng tương tác với cơ sở dữ liệu và xây dựng ứng dụng mạnh mẽ.
Hy vọng rằng bài viết này đã giúp bạn hiểu cách sử dụng Go Lang để tương tác với cơ sở dữ liệu PostgreSQL và MySQL.