真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

初級篇學(xué)會插入數(shù)據(jù)

package main

10年積累的做網(wǎng)站、成都網(wǎng)站制作經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先網(wǎng)站策劃后付款的網(wǎng)站建設(shè)流程,更有無錫免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

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())

}

###

深入內(nèi)部分析原因分析:

1、sql.Open("mysql","dlan:root123@tcp(xx.xx.xx.xx:3306)/aa?charset=utf8")

功能:返回一個DB對象,DB對象對于多個goroutines并發(fā)使用時安全的,DB對象內(nèi)部封裝了連接池

實現(xiàn):open函數(shù)并沒有創(chuàng)建鏈接,它只是驗證參數(shù)是否合法,然后開啟一個單獨goroutines去監(jiān)聽是否需要建立新的連接,當(dāng)有請求建立時就創(chuàng)建

2、db.Query()

用于檢索,比如select

功能:db交給內(nèi)部的Query方法負責(zé)查詢,query首先調(diào)用db內(nèi)部的conn方法從連接池里獲得一個連接,然后調(diào)用內(nèi)部的queryConn方法負責(zé)查詢

db.Query() 調(diào)用完畢后會將連接傳遞給sql.Rows類型,當(dāng)然后者迭代完畢或者顯示的調(diào)用.Clonse()方法后,連接將會被釋放回到連接池

3、db.QueryRow()

功能:用于返回單行的查詢

實現(xiàn):轉(zhuǎn)交給db.Query()查詢

db.QueryRow()調(diào)用完畢后會將連接傳遞給sql.Row類型,當(dāng).Scan()方法調(diào)用之后把連接釋放回到連接池

4、db.Prepare()

功能:返回一個Stmt,Stmt對象可執(zhí)行Exec,Query,QueryRow等操作

實現(xiàn):db交給內(nèi)部的prepare方法負責(zé)查詢,prepare首先調(diào)用db內(nèi)部的conn方法從連接池里獲得一個連接,然后調(diào)用driverConn的prepareLocked方法查詢

Stmt相關(guān)方法:

    st.Exec()

    st.Query()

    st.QueryRow()

    st.Close()

5、db.Begin()

功能:開啟事務(wù),返回Tx對象,調(diào)用該方法后,這個TX就和制定的連接綁定在一起,一旦事物提交或者回滾,該事物綁定的連接就還給db的連接池

實現(xiàn):db交給內(nèi)部的begin方法負責(zé)處理,begin首相調(diào)用db內(nèi)部的conn方法從連接池里面獲得一個連接,然后調(diào)用Conn接口Begin方法獲得一個TX

TX相關(guān)方法:

    tx.Exec()

    tx.Query()

    tx.QueryRow()

    tx.Prepare()

    tx.Commit()

    tx.Rollback()

    tx.Stmt()//用于將一個已存在的statement和tx綁定在一起

db.Begin() 調(diào)用完畢后將連接傳遞給sql.Tx類型對象,當(dāng).Commit()或.Rollback()方法調(diào)用后釋放連接

6、db.Ping(): 調(diào)用完畢后會馬上把連接返回給連接池

7、db.Exec() 調(diào)用完畢后會馬上把連接返回給連接池,但是它返回的Result對象還保留這連接的引用,當(dāng)后面的代碼需要處理結(jié)果集的時候連接將會被重用

配置連接池有兩個的方法:

db.SetMaxOpenConns(n int)設(shè)置打開數(shù)據(jù)庫的最大連接數(shù)。包含正在使用的連接和連接池的連接。如果你的函數(shù)調(diào)用需要申請一個連接,并且連接池已經(jīng)沒有了連接或者連接數(shù)達到了最大連接數(shù)。此時的函數(shù)調(diào)用將會被block,直到有可用的連接才會返回。設(shè)置這個值可以避免并發(fā)太高導(dǎo)致連接mysql出現(xiàn)too many connections的錯誤。該函數(shù)的默認設(shè)置是0,表示無限制。

db.SetMaxIdleConns(n int)設(shè)置連接池中的保持連接的最大連接數(shù)。默認也是0,表示連接池不會保持釋放會連接池中的連接的連接狀態(tài):即當(dāng)連接釋放回到連接池的時候,連接將會被關(guān)閉。這會導(dǎo)致連接再連接池中頻繁的關(guān)閉和創(chuàng)建。

對于連接池的使用依賴于你是如何配置連接池,如果使用不當(dāng)會導(dǎo)致下面問題:

  1. 大量的連接空閑,導(dǎo)致額外的工作和延遲。

  2. 連接數(shù)據(jù)庫的連接過多導(dǎo)致錯誤。

  3. 連接阻塞。

  4. 連接池有超過十個或者更多的死連接,限制就是10次重連。

####Go語言語法格式,需要注意大小寫以及邊界,目前學(xué)習(xí)到此...


本文標(biāo)題:初級篇學(xué)會插入數(shù)據(jù)
本文來源:http://weahome.cn/article/jgjeej.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部