Khi bạn tiếp tục hành trình học Golang của mình, gần như không thể tránh khỏi việc bạn phải tương tác với một số dạng cơ sở dữ liệu
Trong hướng dẫn này, tôi sẽ trình bày cách bạn có thể kết nối với cơ sở dữ liệu MySQL và thực hiện các câu lệnh SQL cơ bản bằng Go
Tại sao MySQL?
MySQL là một trong những công nghệ cơ sở dữ liệu nổi tiếng và được sử dụng nhiều nhất dành cho các nhà phát triển tại thời điểm hiện tại. Nó có một cộng đồng cực kỳ lớn xung quanh nó và nó hoàn toàn có thể cung cấp năng lượng cho một nửa trang web với tư cách là công nghệ cơ sở dữ liệu chính cho Wordpress
Thật dễ dàng để khởi tạo một phiên bản MySQL cục bộ và do đó, thật hoàn hảo để xây dựng một số ứng dụng tốt trên đầu trang
Lưu ý - Lựa chọn công nghệ không nên dựa trên mức độ phổ biến, có thể có những trường hợp bạn cần xem xét các lựa chọn thay thế như cơ sở dữ liệu CockroachDB hoặc NoSQL
Video hướng dẫn
Nếu bạn thích theo dõi video, thì hướng dẫn này có sẵn ở định dạng video tại đây
Hướng dẫn văn bản
Để làm điều này, chúng tôi sẽ sử dụng https. //github. com/go-sql-driver/mysql làm trình điều khiển MySQL của chúng tôi.
package main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "root:password1@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
// perform a db.Query insert
insert, err := db.Query["INSERT INTO test VALUES [ 2, 'TEST' ]"]
// if there is an error inserting, handle it
if err != nil {
panic[err.Error[]]
}
// be careful deferring Queries if you are using transactions
defer insert.Close[]
}
5 là trình điều khiển MySQL nhẹ và nhanh, hỗ trợ các kết nối trên package main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "root:password1@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
// perform a db.Query insert
insert, err := db.Query["INSERT INTO test VALUES [ 2, 'TEST' ]"]
// if there is an error inserting, handle it
if err != nil {
panic[err.Error[]]
}
// be careful deferring Queries if you are using transactions
defer insert.Close[]
}
6, package main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "root:password1@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
// perform a db.Query insert
insert, err := db.Query["INSERT INTO test VALUES [ 2, 'TEST' ]"]
// if there is an error inserting, handle it
if err != nil {
panic[err.Error[]]
}
// be careful deferring Queries if you are using transactions
defer insert.Close[]
}
7, package main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "root:password1@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
// perform a db.Query insert
insert, err := db.Query["INSERT INTO test VALUES [ 2, 'TEST' ]"]
// if there is an error inserting, handle it
if err != nil {
panic[err.Error[]]
}
// be careful deferring Queries if you are using transactions
defer insert.Close[]
}
8 hoặc các giao thức tùy chỉnh và có tính năng xử lý tự động các kết nối bị hỏngKho lưu trữ Github. go-sql-driver/mysql
Tổng hợp kết nối
Nếu bạn đang xây dựng các ứng dụng cơ sở dữ liệu hiệu suất cao, thì kết nối tổng hợp là điều bắt buộc
Rất may, gói nguồn mở mà chúng tôi sẽ sử dụng làm cơ sở cho hướng dẫn này có tính năng tổng hợp kết nối tự động nhờ vào việc sử dụng gói tiêu chuẩn
package main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "root:password1@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
// perform a db.Query insert
insert, err := db.Query["INSERT INTO test VALUES [ 2, 'TEST' ]"]
// if there is an error inserting, handle it
if err != nil {
panic[err.Error[]]
}
// be careful deferring Queries if you are using transactions
defer insert.Close[]
}
9Về cơ bản, điều này có nghĩa là, mỗi khi bạn truy vấn cơ sở dữ liệu của mình, bạn đang sử dụng kết nối từ nhóm kết nối đã được thiết lập khi khởi động ứng dụng. Các kết nối này được sử dụng lại hết lần này đến lần khác và điều này sau đó có nghĩa là bạn không tạo và hủy kết nối mới mỗi khi bạn thực hiện một truy vấn
Thực hiện
Chúng tôi sẽ bắt đầu bằng cách kết nối với cơ sở dữ liệu mà chúng tôi đã thiết lập trên máy cục bộ của mình và sau đó tiếp tục thực hiện một số câu lệnh chèn và chọn cơ bản
Kết nối với cơ sở dữ liệu MySQL
Hãy tạo một tệp
package main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "root:password1@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
// perform a db.Query insert
insert, err := db.Query["INSERT INTO test VALUES [ 2, 'TEST' ]"]
// if there is an error inserting, handle it
if err != nil {
panic[err.Error[]]
}
// be careful deferring Queries if you are using transactions
defer insert.Close[]
}
0 mới. Trong phần này, chúng tôi sẽ nhập một số gói và thiết lập kết nối đơn giản với cơ sở dữ liệu cục bộ đang chạy. Với mục đích của hướng dẫn này, tôi đã khởi động MySQL bằng cách sử dụng phpmyadmin và tôi đã tạo một cơ sở dữ liệu có tên là package main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "root:password1@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
// perform a db.Query insert
insert, err := db.Query["INSERT INTO test VALUES [ 2, 'TEST' ]"]
// if there is an error inserting, handle it
if err != nil {
panic[err.Error[]]
}
// be careful deferring Queries if you are using transactions
defer insert.Close[]
}
1 để kết nối và tạo các bảng bên trong.Chúng tôi sẽ sử dụng
package main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "root:password1@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
// perform a db.Query insert
insert, err := db.Query["INSERT INTO test VALUES [ 2, 'TEST' ]"]
// if there is an error inserting, handle it
if err != nil {
panic[err.Error[]]
}
// be careful deferring Queries if you are using transactions
defer insert.Close[]
}
2 để kết nối với cơ sở dữ liệu của chúng tôi và thiết lập nhóm kết nối tự động của chúng tôi, điều này sẽ trả về một trong hai package main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "root:password1@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
// perform a db.Query insert
insert, err := db.Query["INSERT INTO test VALUES [ 2, 'TEST' ]"]
// if there is an error inserting, handle it
if err != nil {
panic[err.Error[]]
}
// be careful deferring Queries if you are using transactions
defer insert.Close[]
}
3 hoặc một package main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "root:password1@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
// perform a db.Query insert
insert, err := db.Query["INSERT INTO test VALUES [ 2, 'TEST' ]"]
// if there is an error inserting, handle it
if err != nil {
panic[err.Error[]]
}
// be careful deferring Queries if you are using transactions
defer insert.Close[]
}
4 mà chúng tôi có thể xử lýpackage main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "username:password@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
}
Thực hiện các lệnh SQL cơ bản
Vì vậy, bây giờ chúng tôi đã tạo kết nối, chúng tôi cần bắt đầu gửi truy vấn tới cơ sở dữ liệu
Rất may,
package main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "root:password1@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
// perform a db.Query insert
insert, err := db.Query["INSERT INTO test VALUES [ 2, 'TEST' ]"]
// if there is an error inserting, handle it
if err != nil {
panic[err.Error[]]
}
// be careful deferring Queries if you are using transactions
defer insert.Close[]
}
5 cho phép chúng tôi thực hiện bất kỳ lệnh SQL nào mà chúng tôi mong muốn. Chúng ta có thể chỉ cần xây dựng chuỗi truy vấn và chuyển nó vào dưới dạng tham sốpackage main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "root:password1@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
// perform a db.Query insert
insert, err := db.Query["INSERT INTO test VALUES [ 2, 'TEST' ]"]
// if there is an error inserting, handle it
if err != nil {
panic[err.Error[]]
}
// be careful deferring Queries if you are using transactions
defer insert.Close[]
}
Tạo cấu trúc từ kết quả
Truy xuất một tập hợp các kết quả từ cơ sở dữ liệu là tốt và tốt, nhưng chúng tôi cần có thể đọc những kết quả này hoặc điền vào
package main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "root:password1@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
// perform a db.Query insert
insert, err := db.Query["INSERT INTO test VALUES [ 2, 'TEST' ]"]
// if there is an error inserting, handle it
if err != nil {
panic[err.Error[]]
}
// be careful deferring Queries if you are using transactions
defer insert.Close[]
}
6 hiện có để chúng tôi có thể phân tích cú pháp và sửa đổi chúng một cách dễ dàng. Để phân tích một số hàng, chúng ta có thể sử dụng phương thức package main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "root:password1@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
// perform a db.Query insert
insert, err := db.Query["INSERT INTO test VALUES [ 2, 'TEST' ]"]
// if there is an error inserting, handle it
if err != nil {
panic[err.Error[]]
}
// be careful deferring Queries if you are using transactions
defer insert.Close[]
}
7 nhận bất kỳ số lượng đối số nào và cho phép chúng ta điền vào một đối tượng tổng hợppackage main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "root:password1@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
// perform a db.Query insert
insert, err := db.Query["INSERT INTO test VALUES [ 2, 'TEST' ]"]
// if there is an error inserting, handle it
if err != nil {
panic[err.Error[]]
}
// be careful deferring Queries if you are using transactions
defer insert.Close[]
}
0package main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "root:password1@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
// perform a db.Query insert
insert, err := db.Query["INSERT INTO test VALUES [ 2, 'TEST' ]"]
// if there is an error inserting, handle it
if err != nil {
panic[err.Error[]]
}
// be careful deferring Queries if you are using transactions
defer insert.Close[]
}
1Trong ví dụ này, chúng tôi đã lấy 2 cột từ cơ sở dữ liệu thẻ và sau đó sử dụng. Quét để điền vào đối tượng thẻ của chúng tôi
Lưu ý - Nếu bạn lấy 3 trường từ cơ sở dữ liệu và Quét chỉ có 2 tham số thì sẽ bị lỗi. Họ cần phải phù hợp với chính xác
Truy vấn một hàng
Giả sử lần này chúng tôi muốn truy vấn một hàng và có ID và một lần nữa muốn điền vào cấu trúc của chúng tôi. Chúng ta có thể làm điều đó như vậy
package main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "root:password1@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
// perform a db.Query insert
insert, err := db.Query["INSERT INTO test VALUES [ 2, 'TEST' ]"]
// if there is an error inserting, handle it
if err != nil {
panic[err.Error[]]
}
// be careful deferring Queries if you are using transactions
defer insert.Close[]
}
2Sự kết luận
Trong hướng dẫn này, chúng tôi đã quản lý để thiết lập kết nối với MySQL và sau đó thực hiện một số truy vấn đơn giản tới cơ sở dữ liệu đó và sắp xếp các phản hồi được trả về thành một
package main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "root:password1@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
// perform a db.Query insert
insert, err := db.Query["INSERT INTO test VALUES [ 2, 'TEST' ]"]
// if there is an error inserting, handle it
if err != nil {
panic[err.Error[]]
}
// be careful deferring Queries if you are using transactions
defer insert.Close[]
}
8 hoặc một mảng package main
import [
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
]
func main[] {
fmt.Println["Go MySQL Tutorial"]
// Open up our database connection.
// I've set up a database on my local machine using phpmyadmin.
// The database is called testDb
db, err := sql.Open["mysql", "root:password1@tcp[127.0.0.1:3306]/test"]
// if there is an error opening the connection, handle it
if err != nil {
panic[err.Error[]]
}
// defer the close till after the main function has finished
// executing
defer db.Close[]
// perform a db.Query insert
insert, err := db.Query["INSERT INTO test VALUES [ 2, 'TEST' ]"]
// if there is an error inserting, handle it
if err != nil {
panic[err.Error[]]
}
// be careful deferring Queries if you are using transactions
defer insert.Close[]
}
6. Điều này hy vọng sẽ cung cấp cho bạn mọi thứ bạn cần để tiến xa hơn và xây dựng các ứng dụng Go của riêng bạn trên MySQLNếu bạn thấy hướng dẫn này hữu ích hoặc cần hỗ trợ thêm thì vui lòng cho tôi biết trong phần nhận xét bên dưới