Home >Backend Development >Golang >Comparison of the use of Query, Exec and Prepare in Go SQL (with network packet capture)

Comparison of the use of Query, Exec and Prepare in Go SQL (with network packet capture)

藏色散人
藏色散人forward
2020-09-18 09:15:025354browse

The following column golang tutorial will introduce to you the comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Go SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture). I hope it will be helpful to friends in need. !


Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Go SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture)

The database/sql library that comes with Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Go SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) can talk to any relational database. To abstract some links to the database and manage the connection pool The underlying complexity, exposing a little more APIs than actually expected, ultimately leads to some imagination on how to use these APIs.

So, I will try to analyze the behavior of using the main APIs that were previously known.

I experimented with a Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Go SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) application running on a virtual machine on the host machine (ubuntu) and a mysql server.

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

Query

Every time we You should always use db.Query when doing select, and we should never take care of the rows returned by Query, but iterate over them (otherwise we will leak the database link )

ExecutionQuery(query) Will not use prepared statements (see wireshark capture below)

  • Note from the client Only 1 TCP request was sent to the server (minus the login)
  • The link will be automatically released back to the pool when iterating over the returned rows, or we can explicitly call rows.Close() when finished
  • Usage— db.Query("insert into items (name, price, description) values('brownie', 240, 'sizzling')")

Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Go SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture)

View wireshark capture(query)

ExecutionQuery(queryTemplate, params) will use prepared statements behind the scenes

  • Note that 3 TCP requests were sent from the client to the server (minus the login)
  • When the returned rows are iterated, the link will be automatically released back to the pool, or We can explicitly call rows.Close() after completion.
  • Usage — db.Query(“insert into items (name, price, description) values(?,?,?)”, "brownie", 240, "sizzling")

Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Go SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture)

##wireshark capture of Query(query, params)

Exec

We should always use

db.Exec# whenever we want to execute insert or update or delete ##.Execution

Exec(query)

Will not use prepared statements, so there are fewer TCP calls to SQL Server

Note from client to server Only 1 TCP request was sent (minus login)
  • Automatically release the link back to the pool.
  • Usage -
  • db.Exec(“insert into items (name, price, description ) values('brownie', 240, 'sizzling')")

##Wireshark capture of Exec(query)Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Go SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture)

Execution

Exec(queryTemplate, params)

Will use prepared statements behind the scenes, so there will be more TCP calls to SQL Server.

Note that 3 TCPs are sent from the client to the server Request (minus login)

    Release the link and automatically return to the pool.
  • Usage -
  • db.Exec(“insert into items (name, price, description) values(?,? ,?)", "brownie", 240, "sizzling")
##wireshark capture of Exec(query, params)

Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Go SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture)

Prepare

This method should be used only if our program is to be prepared once at the beginning and executed N times during program execution.

Note that there are 2 TCP requests sent from the client to the server (not counting login)

We need to explicitly close the statement when we do not need the prepared statement.
    Otherwise, we will not be able to release the client and resources allocated on the server!
  • Usage — stmt.Exec(“insert into items (name, price, description) values(?,?,?)”, “brownie”, 240, “sizzling”)
wireshark capture of Prepare(query)

Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Comparison of the use of Query, Exec and Prepare in Go SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture) SQL (with network packet capture)Conclusion

First time One of the main confusions we encounter when using the sql package is that we are not aware that it creates prepared statements behind the scenes, even if we are not explicitly instructed to do so.

Hopefully the points above clarify, when are prepared statements invoked and how we can avoid them.
Hopefully the points above clarify, when are prepared statements invoked and how we can avoid them.

The above is the detailed content of Comparison of the use of Query, Exec and Prepare in Go SQL (with network packet capture). For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:learnku.com. If there is any infringement, please contact admin@php.cn delete