代码之家  ›  专栏  ›  技术社区  ›  clarkk

上下文是否会在整个sql事务中用作默认值?

go
  •  0
  • clarkk  · 技术社区  · 2 年前

    我想知道,如果你用一个上下文启动一个事务,那么整个事务是否会“监听”这个上下文?

    tx, _ := db.BeginTx(ctx, &sql.TxOptions{Isolation: sql.LevelSerializable})
    stmt, _ := tx.Prepare("SELECT id, timeout, lang FROM client WHERE id=?")
    

    还是将上下文显式应用于每个查询?

    tx, _ := db.BeginTx(ctx, &sql.TxOptions{Isolation: sql.LevelSerializable})
    stmt, _ := tx.PrepareContext(ctx, "SELECT id, timeout, lang FROM client WHERE id=?")
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Schwern    2 年前

    Prepare ,和其他无上下文方法,使用 context.Background

    来自 Tx.Prepare docs 。。。

    Prepare使用上下文。内部背景;要指定上下文,请使用PrepareContext。

    正在查看 the source code ,它只是一个简单的包装。

    func (tx *Tx) Prepare(query string) (*Stmt, error) {
        return tx.PrepareContext(context.Background(), query)
    }
    

    当Tx存储上下文时 db.BeginTx ,仅用于交易。它不将其用于查询,因为 sharing Contexts leads to confusion and restrictions