Go語言操作MySql數(shù)據(jù)庫的詳細(xì)指南
前言
go-sql-driver/mysql庫是Go語言官方推薦的MySQL驅(qū)動(dòng)庫,可以很方便地實(shí)現(xiàn)對MySQL數(shù)據(jù)庫的連接和操作。本文記錄一下使用go-sql-driver/mysql數(shù)據(jù)庫驅(qū)動(dòng)來操作mysql數(shù)據(jù)庫。
1.安裝驅(qū)動(dòng)程序
go get -u github.com/go-sql-driver/mysql
2.導(dǎo)入驅(qū)動(dòng)包
_ "github.com/go-sql-driver/mysql"
說明:當(dāng)導(dǎo)入帶有空白標(biāo)識符前綴 _ 的包時(shí),將調(diào)用包的 init 函數(shù)。該函數(shù)注冊驅(qū)動(dòng)程序
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() }
運(yùn)行效果:
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語言服務(wù)器開發(fā)之簡易TCP客戶端與服務(wù)端實(shí)現(xiàn)方法
這篇文章主要介紹了Go語言服務(wù)器開發(fā)之簡易TCP客戶端與服務(wù)端實(shí)現(xiàn)方法,實(shí)例分析了基于Go語言實(shí)現(xiàn)的簡易服務(wù)器的TCP客戶端與服務(wù)器端實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-02-02go實(shí)現(xiàn)一個(gè)內(nèi)存緩存系統(tǒng)的示例代碼
本文主要介紹了go實(shí)現(xiàn)一個(gè)內(nèi)存緩存系統(tǒng)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10