Go 語言操作 MySQL 之 CURD 操作

2021-10-07 16:26:06 字數 3563 閱讀 4603

mysql 是目前開發中最常見的關係型資料庫,使用 go 語言進行操控資料庫需要使用 go 自帶database/sql和驅動go-sql-driver/mysql來實現,

建立好 go 專案,需要引用驅動依賴:

go get -u github.com/go-sql-driver/mysql
使用 mysql 驅動:

func open(drivername, datasourcename string) (*db, error)
open 開啟乙個 dirvername 指定的資料庫,datasourcename 指定資料來源,一般至少包括資料庫檔名和其它連線必要的資訊。

var db *sql.db //宣告乙個全域性的 db 變數

// 初始化 mysql 函式

func initmysql() (err error)

err = db.ping()

if err != nil

return

}func main()

defer db.close()

}

初始化連線 mysql 後需要借助db.ping函式來判斷連線是否成功。

func (db *db) setmaxopenconns(n int)
setmaxopenconns設定與資料庫建立連線的最大數目

如果 n 大於 0 且小於最大閒置連線數,會將最大閒置連線數減小到匹配最大開啟連線數的限制。

如果 n <= 0,不會限制最大開啟連線數,預設為0(無限制)。

func (db *db) setmaxidleconns(n int)
setmaxidleconns設定連線池中的最大閒置連線數

如果 n 大於最大開啟連線數,則新的最大閒置連線數會減小到匹配最大開啟連線數的限制。

如果 n <= 0,不會保留閒置連線。

進行 curd 操作,需要對資料庫建立連線,同時有供操作的資料(資料庫與資料表):

建立資料庫 sql_demo

create database sql_demo;

use sql_demo;

建立資料表 user

create table `user` (

`id` bigint(20) not null auto_increment,

`name` varchar(20) default '',

`age` int(11) default '0',

primary key(`id`)

)engine=innodb auto_increment=1 default charset=utf8mb4;

便於接收資料,定義乙個user結構體接收資料:

type user struct
查詢一行資料

db.queryrow()執行一次查詢,並期望返回最多一行結果(即 row )。queryrow 總是返回非 nil 的值,直到返回值的 scan 方法被呼叫時,才會返回被延遲的錯誤。(如:未找到結果)

func (db *db) queryrow(query string, args ...inte***ce{}) *row
例項**如下:

// 查詢一行資料

func queryrowdemo() (u1 *user, err error)

u1 = &u

return

}func main()

defer db.close()

u1, err := queryrowdemo()

if err != nil

fmt.printf("id:%d, age:%d, name:%s\n", u1.id, u1.age, u1.name)

結果如下:

id:1, age:111, name:22
多行查詢

db.query()執行一次查詢,返回多行結果(即 rows ),一般用於執行 select 命令。引數 args 表示 query 中的佔位引數。

func (db *db) query(query string, args ...inte***ce{}) (*rows, error)
例項**如下:

// 查詢多行資料

func querymultirowdemo()

// 查詢完資料後需要進行關閉資料庫鏈結

defer rows.close()

for rows.next()

fmt.printf("id:%d name:%s age:%d\n", u.id, u.name, u.age)

}}

執行結果:

id:1 name:111 age:22

id:3 name:張三 age:22

使用rows.next()迴圈讀取結果集中的資料。

增加、刪除、更新操作均使用exec方法。

func (db *db) exec(query string, args ...inte***ce{}) (result, error)
例項**如下:

// 增加一行資料

func insertrowdemo()

id, err := result.lastinsertid()

if err != nil

fmt.printf("insert success, id:%d\n", id)

}

執行結果:

insert success, id:4
// 更新一組資料

func updaterowdemo()

n, err := result.rowsaffected()

if err != nil

fmt.printf("update success, affected rows:%d\n", n)

}

// 刪除一行資料

func deleterowdemo()

n, err := result.rowsaffected()

if err != nil

fmt.printf("delete success, affected rows:%d\n", n)

}

Go語言操作MySQL

go語言安裝mysql資料庫驅動步驟 安裝驅動 go get github.com go sql driver mysql檢測安裝是否成功 sudo find name go sql driver 進入mysql目錄。ls l wc l一共32個檔案 匯入mysql資料庫驅動import 測試連線資...

Go 語言操作 MySQL 之 預處理

預處理是 mysql 為了防止客戶端頻繁請求的一種技術,是對相同處理語句進行預先載入在 mysql 中,將操作變數資料用佔位符來代替,減少對 mysql 的頻繁請求,使得伺服器高效執行。在這裡客戶端並不是前台後台之間的 c s 架構,而是後台程式對資料庫伺服器進行操作的 c s 架構,這樣就可以簡要...

Go 語言試用 mysql 操作

周海漢 文 2013.8.30 官網 wget 解壓後會生成go目錄 andy s1 test cat hello.go package mainimport fmt func main andy s1 test go build hello.go hello.go 3 8 cannot find ...