doc: 阅读golang sqlx PreparedStatement相关文档
This commit is contained in:
@@ -282,3 +282,20 @@ row = txStmt.QueryRow(852)
|
|||||||
|
|
||||||
prepare操作实际会在数据库运行,故而其需要connection和connection state。
|
prepare操作实际会在数据库运行,故而其需要connection和connection state。
|
||||||
|
|
||||||
|
### PreparedStatement事务操作
|
||||||
|
在使用sqlx进行事务操作时,首先需要通过`db.Begin()`开启事务,且`后续所有想要加入事务的操作(dml/query)都需要通过tx.Exec/tx.Query来执行`。
|
||||||
|
|
||||||
|
如果在开启事务并获取`tx`对象后,后续操作仍然通过`db.Exec/db.Query`来执行,`那么后续操作会从连接池中获取一个新的连接来执行,并不会自动加入已经开启的事务`。
|
||||||
|
|
||||||
|
```go
|
||||||
|
tx, _ = db.Begin()
|
||||||
|
// 错误操作,此处dml会从连接池获取新的连接来执行
|
||||||
|
db.Exec(xxxx)
|
||||||
|
// 正确操作,此处dml会在tx绑定的连接中执行
|
||||||
|
tx.Exec(xxxx)
|
||||||
|
```
|
||||||
|
|
||||||
|
对于PreparedStatement操作,如果想要将其和事务相关联,有如下两种使用方式:
|
||||||
|
- `如果statement此时尚未创建`,可以通过`tx.Prepare`来创建该连接
|
||||||
|
- `如果Steement此时已经创建`,那么可以通过`tx.Stmt(dbStmt)`来获取新的Stmt,新Stmt会和事务所属连接绑定,通过新Stmt执行dml可以加入当前事务
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user