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

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

關于GoSQL中的Query、Exec和Prepare使用對比(附網(wǎng)絡抓包)

下面由golang教程欄目給大家介紹關于Go SQL中的Query、Exec和Prepare使用對比(附網(wǎng)絡抓包) ,希望對需要的朋友有所幫助!

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:主機域名網(wǎng)站空間、營銷軟件、網(wǎng)站建設、濱湖網(wǎng)站維護、網(wǎng)站推廣。

Go 附帶的 database/sql 庫可以與任何關系數(shù)據(jù)庫進行對話. 為了抽象鏈接到數(shù)據(jù)庫以及管理連接池的一些底層復雜性, 暴露的 APIs 比實際預期要多一點. 最終導致了一些關于如何使用這些 APIs 的想象.

因此, 我將嘗試分析一下使用之前已知的主要 API 的行為.

我在主機的一個虛擬機 (ubuntu) 和一個 mysql服務器上運行的 Go 應用程序進行了實驗.

Query tried: insert into items (name, price, description) values (‘brownie’,240,’sizzling’)

查詢

每當我們進行 select時都應該是始終使用 db.Query, 并且我們絕不應該護理 Query 返回的rows, 而應對其進行迭代 (否則我們會泄露數(shù)據(jù)庫鏈接)

執(zhí)行 Query(query)將不使用準備好的語句 (可參閱下面的 wireshark 捕獲內容)

注意從客戶端到服務器僅發(fā)送了 1 個 TCP 請求 (減去登錄)當?shù)祷氐?rows 時鏈接將自動釋放回到池中, 或則我們可以在完成之后顯式調用 rows.Close()用法 — db.Query(“insert into items (name, price, description) values(‘brownie’, 240, ‘sizzling’)”)

查看 wireshark 捕獲 (query)

執(zhí)行 Query(queryTemplate, params) 將在幕后 使用準備好的語句

注意從客戶端向服務器發(fā)送了 3 個 TCP 請求 (減去登錄)當?shù)攴祷氐?rows 時, 鏈接將自動釋放回到池中, 或者我們可以在完成之后顯式調用 rows.Close().用法 — db.Query(“insert into items (name, price, description) values(?,?,?)”, “brownie”, 240, “sizzling”)

Query(query, params) 的 wireshark 捕獲

Exec

每當我們想要執(zhí)行 insert 或 update 或 delete 時都應該始終使用 db.Exec.

執(zhí)行 Exec(query) 不會使用預備語句, 因此對 SQL Server 的 TCP 調用更少

注意從客戶端到服務器僅發(fā)送了 1 個 TCP 請求 (減去登錄)自動釋放鏈接回到池.用法 — db.Exec(“insert into items (name, price, description) values(‘brownie’, 240, ‘sizzling’)”)

Exec(query) 的 wireshark 捕獲

執(zhí)行 Exec(queryTemplate, params) 將在幕后使用預備語句, 因此對 SQL Server 的 TCP 調用會多一些.

注意從客戶端向服務器發(fā)送了 3 個 TCP 請求 (減去登錄)釋放鏈接自動回到池.用法 — db.Exec(“insert into items (name, price, description) values(?,?,?)”, “brownie”, 240, “sizzling”)

Exec(query, params) 的 wireshark 捕獲

Prepare

僅當我們的程序要在開始時準備一次并在程序執(zhí)行期間執(zhí)行 N 次時, 才應使用此方法.

注意有從客戶端到服務端發(fā)送了 2 個 TCP 請求 (不算登錄)當我們不需要預備語句時我們需要顯式關閉語句. 否則, 我們將無法釋放客戶端和服務器上分配的資源!用法 — stmt.Exec(“insert into items (name, price, description) values(?,?,?)”, “brownie”, 240, “sizzling”)

Prepare(query) 的 wireshark 捕獲

結論

第一次使用 sql 包時, 我們遇到的主要困惑之一是, 即使我們沒有明確指示這樣做, 我們也不知道其在幕后創(chuàng)建了預備語句.

希望上述內容可以闡述清楚, 我們應該何時使用預備語句以及如何規(guī)避它們.
Hopefully the points above clarify, when are prepared statements invoked and how we can avoid them.
文章題目:關于GoSQL中的Query、Exec和Prepare使用對比(附網(wǎng)絡抓包)
轉載注明:http://weahome.cn/article/cgeoos.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部