91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

初級篇學會插入數據

發布時間:2020-07-19 20:20:35 來源:網絡 閱讀:633 作者:DBAspace 欄目:編程語言

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,表示連接池不會保持釋放會連接池中的連接的連接狀態:即當連接釋放回到連接池的時候,連接將會被關閉。這會導致連接再連接池中頻繁的關閉和創建。

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

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

  2. 連接數據庫的連接過多導致錯誤。

  3. 連接阻塞。

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

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


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

即墨市| 繁峙县| 冷水江市| 乐安县| 万荣县| 泾源县| 禹城市| 北京市| 株洲市| 延川县| 珲春市| 奇台县| 行唐县| 辽宁省| 集贤县| 烟台市| 吉安县| 突泉县| 奉贤区| 沁水县| 河西区| 临沧市| 新兴县| 鹰潭市| 漠河县| 囊谦县| 宜城市| 泰兴市| 碌曲县| 济源市| 苗栗市| 东明县| 酒泉市| 南陵县| 青海省| 榆社县| 山东省| 巧家县| 长白| 大丰市| 钦州市|