您好,登錄后才能下訂單哦!
Go語(yǔ)言是一個(gè)開(kāi)源的編程語(yǔ)言,它能讓構(gòu)造簡(jiǎn)單、可靠且高效的軟件變得容易。億速云小編今天就來(lái)為大家介紹一下Go語(yǔ)言中如何操作MySQL數(shù)據(jù)庫(kù)。
Go語(yǔ)言操作MySQL數(shù)據(jù)庫(kù):
安裝go操作MySQL的驅(qū)動(dòng)
go get -u -v github.com/go-sql-driver/mysql
go操作MySQL數(shù)據(jù)庫(kù)
導(dǎo)包
import _ "github.com/go-sql-driver/mysql"
程序在操作數(shù)據(jù)庫(kù)的時(shí)候只需要用到database/sql,而不需要直接使用數(shù)據(jù)庫(kù)驅(qū)動(dòng),所以程序在導(dǎo)入數(shù)據(jù)庫(kù)驅(qū)動(dòng)的時(shí)候?qū)⑦@個(gè)包的名字設(shè)置成下劃線。
連接數(shù)據(jù)庫(kù),用sql.Open()方法,open()方法的第一個(gè)參數(shù)是驅(qū)動(dòng)名稱,第二個(gè)參數(shù)是連接字符串,格式為:用戶名:密碼@tcp(ip:port)/數(shù)據(jù)庫(kù)名稱?編碼方式,返回值是連接對(duì)象和錯(cuò)誤信息,例如:
conn,err := sql.Open("mysql","root:123456@tcp(127.0.0.1:3306)/test?charset=utf8") defer conn.Close()//隨手關(guān)閉數(shù)據(jù)庫(kù)是個(gè)好習(xí)慣
執(zhí)行數(shù)據(jù)庫(kù)操作。
數(shù)據(jù)庫(kù)的主要方法有:
Query 執(zhí)行數(shù)據(jù)庫(kù)的查詢操作,例如一個(gè)Select語(yǔ)句,返回?cái)?shù)據(jù)類型為*Rows
QueryRow 執(zhí)行數(shù)據(jù)庫(kù)至多返回一條數(shù)據(jù),返回?cái)?shù)據(jù)類型為*Row
Exec 執(zhí)行數(shù)不返回任何rows的據(jù)庫(kù)語(yǔ)句,例如delete操作
PrePare 準(zhǔn)備一個(gè)數(shù)據(jù)庫(kù)query操作,返回一個(gè)*Stmt,用于后續(xù)query或Exec。這個(gè)Stmt可以被多次執(zhí)行,或者并發(fā)執(zhí)行
創(chuàng)建表
exec函數(shù)如下:
func (db *DB) Exec(query string, args ...interface{}) (Result, error)
創(chuàng)建表的方法也是Exec(),參數(shù)是SQL語(yǔ)句,返回值是結(jié)果集和錯(cuò)誤信息.
其中result包含的內(nèi)容有:
type Result interface { LastInsertId() (int64, error) RowsAffected() (int64, error) }
RowsAffected() 函數(shù),可以獲得成功執(zhí)行SQL后對(duì)數(shù)據(jù)庫(kù)所影響的行數(shù)。
res ,err:= conn.Exec("create table user(name VARCHAR(40),pwd VARCHAR(40))") beego.Info("create table result=",res.,err)
增刪改操作
執(zhí)行增刪改操作語(yǔ)句的是Exec(),參數(shù)是SQL語(yǔ)句,返回值是結(jié)果集和錯(cuò)誤信息,通過(guò)對(duì)結(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實(shí)現(xiàn)單行查詢,能確定該SQL語(yǔ)句的查詢結(jié)果為一條記錄。將結(jié)果中的字段值使用Scan()函數(shù)依次提取。
利用Query實(shí)現(xiàn)多行數(shù)據(jù)查詢,返回值為查詢結(jié)果集和錯(cuò)誤信息。通過(guò)next和Scan函數(shù)一起將數(shù)據(jù)取出來(lái)
代碼如下:
單行查詢:
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ù)庫(kù) 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語(yǔ)言中如何操作MySQL數(shù)據(jù)庫(kù)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的參考價(jià)值,可以學(xué)以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。