Go語言是一個開源的編程語言,它能讓構(gòu)造簡單、可靠且高效的軟件變得容易。創(chuàng)新互聯(lián)小編今天就來為大家介紹一下Go語言中如何操作MySQL數(shù)據(jù)庫。
創(chuàng)新互聯(lián)是一家以網(wǎng)絡(luò)技術(shù)公司,為中小企業(yè)提供網(wǎng)站維護(hù)、成都網(wǎng)站設(shè)計、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司、網(wǎng)站備案、服務(wù)器租用、域名注冊、軟件開發(fā)、成都小程序開發(fā)等企業(yè)互聯(lián)網(wǎng)相關(guān)業(yè)務(wù),是一家有著豐富的互聯(lián)網(wǎng)運(yùn)營推廣經(jīng)驗的科技公司,有著多年的網(wǎng)站建站經(jīng)驗,致力于幫助中小企業(yè)在互聯(lián)網(wǎng)讓打出自已的品牌和口碑,讓企業(yè)在互聯(lián)網(wǎng)上打開一個面向全國乃至全球的業(yè)務(wù)窗口:建站歡迎咨詢:028-86922220
Go語言操作MySQL數(shù)據(jù)庫:
安裝go操作MySQL的驅(qū)動
go get -u -v github.com/go-sql-driver/mysql
go操作MySQL數(shù)據(jù)庫
導(dǎo)包
import _ "github.com/go-sql-driver/mysql"
程序在操作數(shù)據(jù)庫的時候只需要用到database/sql,而不需要直接使用數(shù)據(jù)庫驅(qū)動,所以程序在導(dǎo)入數(shù)據(jù)庫驅(qū)動的時候?qū)⑦@個包的名字設(shè)置成下劃線。
連接數(shù)據(jù)庫,用sql.Open()方法,open()方法的第一個參數(shù)是驅(qū)動名稱,第二個參數(shù)是連接字符串,格式為:用戶名:密碼@tcp(ip:port)/數(shù)據(jù)庫名稱?編碼方式,返回值是連接對象和錯誤信息,例如:
conn,err := sql.Open("mysql","root:123456@tcp(127.0.0.1:3306)/test?charset=utf8") defer conn.Close()//隨手關(guān)閉數(shù)據(jù)庫是個好習(xí)慣
執(zhí)行數(shù)據(jù)庫操作。
數(shù)據(jù)庫的主要方法有:
Query 執(zhí)行數(shù)據(jù)庫的查詢操作,例如一個Select語句,返回數(shù)據(jù)類型為*Rows
QueryRow 執(zhí)行數(shù)據(jù)庫至多返回一條數(shù)據(jù),返回數(shù)據(jù)類型為*Row
Exec 執(zhí)行數(shù)不返回任何rows的據(jù)庫語句,例如delete操作
PrePare 準(zhǔn)備一個數(shù)據(jù)庫query操作,返回一個*Stmt,用于后續(xù)query或Exec。這個Stmt可以被多次執(zhí)行,或者并發(fā)執(zhí)行
創(chuàng)建表
exec函數(shù)如下:
func (db *DB) Exec(query string, args ...interface{}) (Result, error)
創(chuàng)建表的方法也是Exec(),參數(shù)是SQL語句,返回值是結(jié)果集和錯誤信息.
其中result包含的內(nèi)容有:
type Result interface { LastInsertId() (int64, error) RowsAffected() (int64, error) }
RowsAffected() 函數(shù),可以獲得成功執(zhí)行SQL后對數(shù)據(jù)庫所影響的行數(shù)。
res ,err:= conn.Exec("create table user(name VARCHAR(40),pwd VARCHAR(40))") beego.Info("create table result=",res.,err)
增刪改操作
執(zhí)行增刪改操作語句的是Exec(),參數(shù)是SQL語句,返回值是結(jié)果集和錯誤信息,通過對結(jié)果集的判斷,得到執(zhí)行結(jié)果的信息。以插入數(shù)據(jù)為例代碼如下:
res,_:=stmt.Exec("insert user(name,pwd) values (?,?)","tony","tony") count,_:=res.RowsAffected() this.Ctx.WriteString(strconv.Itoa(int(count)))
查詢操作
用的函數(shù)是Query()和QueryRow.
func (db *DB) QueryRow(query string, args ...interface{}) *Row func (db *DB) Query(query string, args ...interface{}) (*Rows, error)
利用QueryRow實現(xiàn)單行查詢,能確定該SQL語句的查詢結(jié)果為一條記錄。將結(jié)果中的字段值使用Scan()函數(shù)依次提取。
利用Query實現(xiàn)多行數(shù)據(jù)查詢,返回值為查詢結(jié)果集和錯誤信息。通過next和Scan函數(shù)一起將數(shù)據(jù)取出來
代碼如下:
單行查詢:
row:= conn.QueryRow(`select * from user where userName = "wyj"`) var name,pwd string row.Scan(&name,&pwd) beego.Info(name,"------",pwd)
多行查詢:
data ,err :=conn.Query("SELECT name from user") var userName string if err == nil{ for data.Next(){ data.Scan(&userName) beego.Info(userName) } }
全部代碼
//連接數(shù)據(jù)庫 conn,err := sql.Open("mysql","root:123456@tcp(127.0.0.1:3306)/testtest?charset=utf8") if err != nil{ beego.Info("鏈接失敗") } defer conn.Close() //建表 res ,err:= conn.Exec("create table user(userName VARCHAR(40),passwd VARCHAR(40))") beego.Info("create table result=",res,err) //插入數(shù)據(jù) res,err =conn.Exec("insert user(userName,passwd) values(?,?)","itcast","heima") beego.Info(res,err) //單行查詢 row:= conn.QueryRow(`select * from user where userName = "wyj"`) var name,pwd string row.Scan(&name,&pwd) beego.Info(name,"------",pwd) //多行查詢 data ,err :=conn.Query("SELECT userName from user") var userName string if err == nil{ for data.Next(){ data.Scan(&userName) beego.Error(userName) } }
關(guān)于Go語言中如何操作MySQL數(shù)據(jù)庫就分享到這里了,希望以上內(nèi)容可以對大家有一定的參考價值,可以學(xué)以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。