Go語言操作MySql數(shù)據(jù)庫的詳細指南
前言
go-sql-driver/mysql庫是Go語言官方推薦的MySQL驅(qū)動庫,可以很方便地實現(xiàn)對MySQL數(shù)據(jù)庫的連接和操作。本文記錄一下使用go-sql-driver/mysql數(shù)據(jù)庫驅(qū)動來操作mysql數(shù)據(jù)庫。
1.安裝驅(qū)動程序
go get -u github.com/go-sql-driver/mysql
2.導入驅(qū)動包
_ "github.com/go-sql-driver/mysql"
說明:當導入帶有空白標識符前綴 _ 的包時,將調(diào)用包的 init 函數(shù)。該函數(shù)注冊驅(qū)動程序
3.操作數(shù)據(jù)庫
3.1 獲取mysql版本
func showMysqlVersion() {
db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
db.Ping()
defer db.Close()
if err != nil {
fmt.Println("數(shù)據(jù)庫連接失?。?)
log.Fatalln(err)
}
var version string
err2 := db.QueryRow("SELECT VERSION()").Scan(&version)
if err2 != nil {
log.Fatal(err2)
}
fmt.Println(version)
}3.2 創(chuàng)建表
func createTable() {
db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB")
db.Ping()
defer db.Close()
if err != nil {
fmt.Println("connect DB error !")
log.Fatalln(err)
}
_, err2 := db.Exec("CREATE TABLE user(id INT NOT NULL , name VARCHAR(20), PRIMARY KEY(ID));")
if err2 != nil {
log.Fatal(err2)
}
fmt.Println("successfully create table")
}3.3 表中插入數(shù)據(jù)
func insertItem() {
db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
db.Ping()
defer db.Close()
if err != nil {
fmt.Println("connect DB error !")
log.Fatalln(err)
}
_, err2 := db.Query("INSERT INTO user VALUES(1, 'zhangsan')")
if err2 != nil {
log.Fatal(err2)
}
fmt.Println("successfully insert item")
}3.4 表中刪除數(shù)據(jù)
func deleteItem() {
db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
db.Ping()
defer db.Close()
if err != nil {
fmt.Println("connect DB error !")
log.Fatalln(err)
}
sql := "DELETE FROM user WHERE id = 1"
res, err2 := db.Exec(sql)
if err2 != nil {
panic(err2.Error())
}
affectedRows, err := res.RowsAffected()
if err != nil {
log.Fatal(err)
}
fmt.Printf("delete item success, statement affected %d rows\n", affectedRows)
}
3.5 修改表中數(shù)據(jù)
func alterItem() {
db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
db.Ping()
defer db.Close()
if err != nil {
fmt.Println("connect DB error !")
log.Fatalln(err)
}
sql := "update user set name = ? WHERE id = ?"
res, err2 := db.Exec(sql, "lisi", 1)
if err2 != nil {
panic(err2.Error())
}
affectedRows, err := res.RowsAffected()
if err != nil {
log.Fatal(err)
}
fmt.Printf("alter item success, statement affected %d rows\n", affectedRows)
}3.6 查詢表中數(shù)據(jù)
func queryItem() {
db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
db.Ping()
defer db.Close()
if err != nil {
fmt.Println("connect DB error !")
log.Fatalln(err)
}
var mid int = 1
result, err2 := db.Query("SELECT * FROM user WHERE id = ?", mid)
if err2 != nil {
log.Fatal(err2)
}
for result.Next() {
var id int
var name string
err = result.Scan(&id, &name)
if err != nil {
log.Fatal(err)
}
fmt.Printf("id: %d, name: %s\n", id, name)
}
}
3.7 刪除表
func dropTable() {
db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB")
db.Ping()
defer db.Close()
if err != nil {
fmt.Println("connect DB error !")
log.Fatalln(err)
}
_, err2 := db.Exec("DROP TABLE user;")
if err2 != nil {
log.Fatal(err2)
}
fmt.Println("successfully drop table")
}4.綜合演示
完整代碼如下:
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func showMysqlVersion() {
db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
db.Ping()
defer db.Close()
if err != nil {
fmt.Println("數(shù)據(jù)庫連接失??!")
log.Fatalln(err)
}
var version string
err2 := db.QueryRow("SELECT VERSION()").Scan(&version)
if err2 != nil {
log.Fatal(err2)
}
fmt.Println(version)
}
func createTable() {
db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB")
db.Ping()
defer db.Close()
if err != nil {
fmt.Println("connect DB error !")
log.Fatalln(err)
}
_, err2 := db.Exec("CREATE TABLE user(id INT NOT NULL , name VARCHAR(20), PRIMARY KEY(ID));")
if err2 != nil {
log.Fatal(err2)
}
fmt.Println("successfully create table")
}
func insertItem() {
db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
db.Ping()
defer db.Close()
if err != nil {
fmt.Println("connect DB error !")
log.Fatalln(err)
}
_, err2 := db.Query("INSERT INTO user VALUES(1, 'zhangsan')")
if err2 != nil {
log.Fatal(err2)
}
fmt.Println("successfully insert item")
}
func deleteItem() {
db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
db.Ping()
defer db.Close()
if err != nil {
fmt.Println("connect DB error !")
log.Fatalln(err)
}
sql := "DELETE FROM user WHERE id = 1"
res, err2 := db.Exec(sql)
if err2 != nil {
panic(err2.Error())
}
affectedRows, err := res.RowsAffected()
if err != nil {
log.Fatal(err)
}
fmt.Printf("delete item success, statement affected %d rows\n", affectedRows)
}
func alterItem() {
db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
db.Ping()
defer db.Close()
if err != nil {
fmt.Println("connect DB error !")
log.Fatalln(err)
}
sql := "update user set name = ? WHERE id = ?"
res, err2 := db.Exec(sql, "lisi", 1)
if err2 != nil {
panic(err2.Error())
}
affectedRows, err := res.RowsAffected()
if err != nil {
log.Fatal(err)
}
fmt.Printf("alter item success, statement affected %d rows\n", affectedRows)
}
func queryItem() {
db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
db.Ping()
defer db.Close()
if err != nil {
fmt.Println("connect DB error !")
log.Fatalln(err)
}
var mid int = 1
result, err2 := db.Query("SELECT * FROM user WHERE id = ?", mid)
if err2 != nil {
log.Fatal(err2)
}
for result.Next() {
var id int
var name string
err = result.Scan(&id, &name)
if err != nil {
log.Fatal(err)
}
fmt.Printf("id: %d, name: %s\n", id, name)
}
}
func dropTable() {
db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB")
db.Ping()
defer db.Close()
if err != nil {
fmt.Println("connect DB error !")
log.Fatalln(err)
}
_, err2 := db.Exec("DROP TABLE user;")
if err2 != nil {
log.Fatal(err2)
}
fmt.Println("successfully drop table")
}
func main() {
showMysqlVersion()
createTable()
insertItem()
queryItem()
alterItem()
queryItem()
deleteItem()
dropTable()
}
運行效果:
go mod init mysql-test.go
go build mysql-test.go
./mysql-test

代碼結(jié)構(gòu):

總結(jié)
到此這篇關(guān)于Go語言操作MySql數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)Go操作MySql數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
go中的參數(shù)傳遞是值傳遞還是引用傳遞的實現(xiàn)
參數(shù)傳遞機制是一個重要的概念,它決定了函數(shù)內(nèi)部對參數(shù)的修改是否會影響到原始數(shù)據(jù),本文主要介紹了go中的參數(shù)傳遞是值傳遞還是引用傳遞的實現(xiàn),感興趣的可以了解一下2024-12-12
Goland調(diào)節(jié)字體大小的設置(編輯區(qū),terminal區(qū),頁面字體)
這篇文章主要介紹了Goland調(diào)節(jié)字體大小的設置(編輯區(qū),terminal區(qū),頁面字體),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Golang應用執(zhí)行Shell命令實戰(zhàn)
本文主要介紹了Golang應用執(zhí)行Shell命令實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03

