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 ...