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