Chuỗi kết nối mysql golang

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ỏng

Kho 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[]


}
9

Về 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ợ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

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

Trong 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[]


}
2

Sự 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 MySQL

Nế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

Chủ Đề