溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Go語(yǔ)言中如何操作MySQL數(shù)據(jù)庫(kù)

發(fā)布時(shí)間:2020-04-27 10:26:09 來(lái)源:億速云 閱讀:779 作者:小新 欄目:編程語(yǔ)言

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é)以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI