Go語(yǔ)言操作MySql數(shù)據(jù)庫(kù)的詳細(xì)指南
前言
go-sql-driver/mysql庫(kù)是Go語(yǔ)言官方推薦的MySQL驅(qū)動(dòng)庫(kù),可以很方便地實(shí)現(xiàn)對(duì)MySQL數(shù)據(jù)庫(kù)的連接和操作。本文記錄一下使用go-sql-driver/mysql數(shù)據(jù)庫(kù)驅(qū)動(dòng)來(lái)操作mysql數(shù)據(jù)庫(kù)。
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"
說(shuō)明:當(dāng)導(dǎo)入帶有空白標(biāo)識(shí)符前綴 _ 的包時(shí),將調(diào)用包的 init 函數(shù)。該函數(shù)注冊(cè)驅(qū)動(dòng)程序
3.操作數(shù)據(jù)庫(kù)
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ù)庫(kù)連接失??!") 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ù)庫(kù)連接失敗!") 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語(yǔ)言操作MySql數(shù)據(jù)庫(kù)的文章就介紹到這了,更多相關(guān)Go操作MySql數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語(yǔ)言服務(wù)器開發(fā)之簡(jiǎn)易TCP客戶端與服務(wù)端實(shí)現(xiàn)方法
這篇文章主要介紹了Go語(yǔ)言服務(wù)器開發(fā)之簡(jiǎn)易TCP客戶端與服務(wù)端實(shí)現(xiàn)方法,實(shí)例分析了基于Go語(yǔ)言實(shí)現(xiàn)的簡(jiǎn)易服務(wù)器的TCP客戶端與服務(wù)器端實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-02-028種超簡(jiǎn)單的Golang生成隨機(jī)字符串方式分享
這篇文章主要為大家詳細(xì)介紹了8種超簡(jiǎn)單的Golang生成隨機(jī)字符串方式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01go實(shí)現(xiàn)一個(gè)內(nèi)存緩存系統(tǒng)的示例代碼
本文主要介紹了go實(shí)現(xiàn)一個(gè)內(nèi)存緩存系統(tǒng)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10