Go語(yǔ)言實(shí)現(xiàn)操作MySQL的基礎(chǔ)知識(shí)總結(jié)
前言
MySQL 是目前開(kāi)發(fā)中最常見(jiàn)的關(guān)系型數(shù)據(jù)庫(kù),也是程序員打交道最多的數(shù)據(jù)庫(kù)。 使用 Go 語(yǔ)言進(jìn)行操控?cái)?shù)據(jù)庫(kù)需要使用 Go 自帶database/sql
和驅(qū)動(dòng)go-sql-driver/mysql
來(lái)實(shí)現(xiàn)。這篇文章主要總結(jié)一下怎么使用Go語(yǔ)言操作MySql數(shù)據(jù)庫(kù),需要的朋友可以參考以下內(nèi)容,希望對(duì)大家有幫助。
下載依賴
database/sql
是Go操作數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)庫(kù)之一,它提供了一系列接口方法,用于訪問(wèn)數(shù)據(jù)庫(kù)(mysql,sqllite,oralce),但是它并不會(huì)提供數(shù)據(jù)庫(kù)特有的方法,那些特有的方法需要交給數(shù)據(jù)庫(kù)驅(qū)動(dòng)去處理。
我們?cè)谕ǔ9ぷ髦校玫母嗟氖莏moiron/sqlx包來(lái)操作數(shù)據(jù)庫(kù),sqlx是基于標(biāo)準(zhǔn)庫(kù)的擴(kuò)展,并且我們可以通過(guò)sqlx操作各種類型的數(shù)據(jù)。
go get -u github.com/go-sql-driver/mysql go get -u github.com/jmoiron/sqlx
使用 MySQL 驅(qū)動(dòng)
Open
打開(kāi)一個(gè) dirverName
指定的數(shù)據(jù)庫(kù),dataSourceName
指定數(shù)據(jù)源,一般至少包括數(shù)據(jù)庫(kù)文件名和其它連接必要的信息。
func Open(driverName, dataSourceName string) (*DB, error)
它返回的是一個(gè)sql.DB
數(shù)據(jù)庫(kù)類型,它不是數(shù)據(jù)庫(kù)連接,Go 中的連接來(lái)自內(nèi)部實(shí)現(xiàn)的連接池,連接的建立是惰性的,連接將會(huì)在操作的時(shí)候,由連接池創(chuàng)建并維護(hù),它可以安全地被多個(gè)goroutine同時(shí)使用。
示例:
package main import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) var db *sql.DB //聲明一個(gè)全局的 db 變量 func main() { // 初始化 MySQL err := initDB() if err != nil { panic(err) } defer db.Close() // 注意這行代碼要寫(xiě)在上面err判斷的下面 } //initDB 初始化MySQL func initDB() (err error) { // 不會(huì)校驗(yàn)賬號(hào)密碼是否正確 db, err = sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test") if err != nil { return err } // 嘗試與數(shù)據(jù)庫(kù)建立連接(校驗(yàn)dsn是否正確) err = db.Ping() if err != nil { return err } return nil }
注意:
sql.Open
只會(huì)驗(yàn)證格式是否正確,不會(huì)連接數(shù)據(jù)庫(kù)。db.Ping
會(huì)連接數(shù)據(jù)庫(kù),判斷用戶,密碼,ip地址,端口是否正確。db.Close
在err
之后,是因?yàn)榭赡艽蜷_(kāi)不成功,關(guān)閉一個(gè)沒(méi)有打開(kāi)的連接。
SetMaxOpenConns
func (db *DB) SetMaxOpenConns(n int)
SetMaxOpenConns
設(shè)置與數(shù)據(jù)庫(kù)建立連接的最大數(shù)目。 如果n大于0且小于最大閑置連接數(shù),會(huì)將最大閑置連接數(shù)減小到匹配最大開(kāi)啟連接數(shù)的限制。 如果n<=0,不會(huì)限制最大開(kāi)啟連接數(shù),默認(rèn)為0(無(wú)限制)。
SetMaxIdleConns
func (db *DB) SetMaxIdleConns(n int)
SetMaxIdleConns
設(shè)置連接池中的最大閑置連接數(shù)。 如果n大于最大開(kāi)啟連接數(shù),則新的最大閑置連接數(shù)會(huì)減小到匹配最大開(kāi)啟連接數(shù)的限制。 如果n<=0,不會(huì)保留閑置連接。
操作
func (db *DB) Query(query string, args ...interface{}) (*Rows, error) func (db *DB) QueryRow(query string, args ...interface{}) *Row func (db *DB) Exec(query string, args ...interface{}) (Result, error) func (db *DB) Prepare(query string) (*Stmt, error)
db.Query()
: 返回多行數(shù)據(jù),需要依次遍歷,并且需要自己關(guān)閉查詢結(jié)果集。
db.QueryRow()
:專門(mén)查詢一行數(shù)據(jù)語(yǔ)法,返回ErrNoRow
或者一行數(shù)據(jù),不需要自己關(guān)閉結(jié)果集。
db.Exec()
:用于執(zhí)行insert
、update
、delete
等不需要返回結(jié)果集的操作。
db.Prepare()
:預(yù)先將一個(gè)數(shù)據(jù)庫(kù)連接(con)
和一個(gè)條sql
語(yǔ)句綁定并返回stmt
結(jié)構(gòu)體代表這個(gè)綁定后的連接,然后運(yùn)行stmt.Query()
或者stmt.QueryRow()
;stmt
是并發(fā)安全的。之所以這樣設(shè)計(jì),是因?yàn)槊看沃苯诱{(diào)用db.Prepare都會(huì)自動(dòng)選擇一個(gè)可用的con
,每次選擇的可能不是同一個(gè)con
。
到此這篇關(guān)于Go語(yǔ)言實(shí)現(xiàn)操作MySQL的基礎(chǔ)知識(shí)總結(jié)的文章就介紹到這了,更多相關(guān)Go語(yǔ)言操作MySQL內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何使用騰訊云go sdk 查詢對(duì)象存儲(chǔ)中最新文件
這篇文章主要介紹了使用騰訊云go sdk 查詢對(duì)象存儲(chǔ)中最新文件,這包括如何創(chuàng)建COS客戶端,如何逐頁(yè)檢索對(duì)象列表,并如何對(duì)結(jié)果排序以找到最后更新的對(duì)象,我們還展示了如何優(yōu)化用戶體驗(yàn),通過(guò)實(shí)時(shí)進(jìn)度更新和檢索多個(gè)文件來(lái)改進(jìn)程序,需要的朋友可以參考下2024-03-03golang中package?is?not?in?GOROOT報(bào)錯(cuò)的真正解決辦法
這篇文章主要給大家介紹了關(guān)于golang中package?is?not?in?GOROOT報(bào)錯(cuò)的真正解決辦法,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)同樣遇到這個(gè)問(wèn)題的朋友具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-03-03關(guān)于go-micro與其它gRPC框架之間的通信問(wèn)題及解決方法
在之前的文章中分別介紹了使用gRPC官方插件和go-micro插件開(kāi)發(fā)gRPC應(yīng)用程序的方式,都能正常走通。不過(guò)當(dāng)兩者混合使用的時(shí)候,互相訪問(wèn)就成了問(wèn)題,下面通過(guò)本文給大家講解下go-micro與gRPC框架通信問(wèn)題,一起看看吧2022-04-04Golang分布式注冊(cè)中心實(shí)現(xiàn)流程講解
這篇文章主要介紹了Golang分布式注冊(cè)中心實(shí)現(xiàn)流程,注冊(cè)中心可以用于服務(wù)發(fā)現(xiàn),服務(wù)注冊(cè),配置管理等方面,在分布式系統(tǒng)中,服務(wù)的發(fā)現(xiàn)和注冊(cè)是非常重要的組成部分,需要的朋友可以參考下2023-05-05Go語(yǔ)言學(xué)習(xí)之將mp4通過(guò)rtmp推送流媒體服務(wù)的實(shí)現(xiàn)方法
對(duì)音視頻一直是小白,決定沉下心來(lái),好好研究一下音視頻知識(shí),下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言學(xué)習(xí)之將mp4通過(guò)rtmp推送流媒體服務(wù)的實(shí)現(xiàn)方法,需要的朋友可以參考下2022-12-12