您好,登錄后才能下訂單哦!
package main
import "database/sql"
import "fmt"
import "time"
import _ "github.com/go-sql-driver/mysql"
func main() {
db, e := sql.Open("mysql","dlan:root123@tcp(xx.xx.xx.xx:3306)/aa?charset=utf8")
if e != nil {
fmt.Println ("error")
return
}
fmt.Println("Conn DB OK")
start :=time.Now()
tx,_:=db.Begin()
for i :=1;i<=1000;i++{
fmt.Println(i)
tx.Exec("insert into aa(id,c_type)value(?,?)",i,i+2)
}
tx.Commit()
end :=time.Now()
fmt.Print(end.Sub(start).Seconds())
}
###
1、sql.Open("mysql","dlan:root123@tcp(xx.xx.xx.xx:3306)/aa?charset=utf8")
功能:返回一個DB對象,DB對象對于多個goroutines并發使用時安全的,DB對象內部封裝了連接池
實現:open函數并沒有創建鏈接,它只是驗證參數是否合法,然后開啟一個單獨goroutines去監聽是否需要建立新的連接,當有請求建立時就創建
2、db.Query()
用于檢索,比如select
功能:db交給內部的Query方法負責查詢,query首先調用db內部的conn方法從連接池里獲得一個連接,然后調用內部的queryConn方法負責查詢
db.Query() 調用完畢后會將連接傳遞給sql.Rows類型,當然后者迭代完畢或者顯示的調用.Clonse()方法后,連接將會被釋放回到連接池
3、db.QueryRow()
功能:用于返回單行的查詢
實現:轉交給db.Query()查詢
db.QueryRow()調用完畢后會將連接傳遞給sql.Row類型,當.Scan()方法調用之后把連接釋放回到連接池
4、db.Prepare()
功能:返回一個Stmt,Stmt對象可執行Exec,Query,QueryRow等操作
實現:db交給內部的prepare方法負責查詢,prepare首先調用db內部的conn方法從連接池里獲得一個連接,然后調用driverConn的prepareLocked方法查詢
Stmt相關方法:
st.Exec()
st.Query()
st.QueryRow()
st.Close()
5、db.Begin()
功能:開啟事務,返回Tx對象,調用該方法后,這個TX就和制定的連接綁定在一起,一旦事物提交或者回滾,該事物綁定的連接就還給db的連接池
實現:db交給內部的begin方法負責處理,begin首相調用db內部的conn方法從連接池里面獲得一個連接,然后調用Conn接口Begin方法獲得一個TX
TX相關方法:
tx.Exec()
tx.Query()
tx.QueryRow()
tx.Prepare()
tx.Commit()
tx.Rollback()
tx.Stmt()//用于將一個已存在的statement和tx綁定在一起
db.Begin() 調用完畢后將連接傳遞給sql.Tx類型對象,當.Commit()或.Rollback()方法調用后釋放連接
6、db.Ping(): 調用完畢后會馬上把連接返回給連接池
7、db.Exec() 調用完畢后會馬上把連接返回給連接池,但是它返回的Result對象還保留這連接的引用,當后面的代碼需要處理結果集的時候連接將會被重用
配置連接池有兩個的方法:
db.SetMaxOpenConns(n int) 設置打開數據庫的最大連接數。包含正在使用的連接和連接池的連接。如果你的函數調用需要申請一個連接,并且連接池已經沒有了連接或者連接數達到了最大連接數。此時的函數調用將會被block,直到有可用的連接才會返回。設置這個值可以避免并發太高導致連接mysql出現too many connections的錯誤。該函數的默認設置是0,表示無限制。
db.SetMaxIdleConns(n int) 設置連接池中的保持連接的最大連接數。默認也是0,表示連接池不會保持釋放會連接池中的連接的連接狀態:即當連接釋放回到連接池的時候,連接將會被關閉。這會導致連接再連接池中頻繁的關閉和創建。
對于連接池的使用依賴于你是如何配置連接池,如果使用不當會導致下面問題:
大量的連接空閑,導致額外的工作和延遲。
連接數據庫的連接過多導致錯誤。
連接阻塞。
連接池有超過十個或者更多的死連接,限制就是10次重連。
####Go語言語法格式,需要注意大小寫以及邊界,目前學習到此...
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。