sql

package
v1.22.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 26, 2024 License: MIT Imports: 8 Imported by: 0

Documentation

Overview

sqlパッケージは、SQL(またはSQLライク)データベースを取り巻く汎用インターフェースを提供します。

sqlパッケージは、データベースドライバと共に使用する必要があります。 ドライバのリストについては、https://golang.org/s/sqldrivers を参照してください。

コンテキストのキャンセルをサポートしていないドライバは、クエリが完了するまで戻らないことに注意してください。

使用例については、https://golang.org/s/sqlwiki のウィキページを参照してください。

Example (OpenDBCLI)
id := flag.Int64("id", 0, "person ID to find")
dsn := flag.String("dsn", os.Getenv("DSN"), "connection data source name")
flag.Parse()

if len(*dsn) == 0 {
	log.Fatal("missing dsn flag")
}
if *id == 0 {
	log.Fatal("missing person ID")
}
var err error

// ドライバを開く場合、通常、データベースへの接続は試みられません。
pool, err = sql.Open("driver-name", *dsn)
if err != nil {

	// これは接続エラーではなく、DSN解析エラーや他の初期化エラーです。
	log.Fatal("unable to use data source name", err)
}
defer pool.Close()

pool.SetConnMaxLifetime(0)
pool.SetMaxIdleConns(3)
pool.SetMaxOpenConns(3)

ctx, stop := context.WithCancel(context.Background())
defer stop()

appSignal := make(chan os.Signal, 3)
signal.Notify(appSignal, os.Interrupt)

go func() {
	<-appSignal
	stop()
}()

Ping(ctx)

Query(ctx, *id)
Output:

Example (OpenDBService)
// ドライバを開くと、通常はデータベースに接続しようとは試みません。
db, err := sql.Open("driver-name", "database=test1")
if err != nil {

	// これは接続エラーではなく、DSNの解析エラーや他の初期化エラーです。
	log.Fatal(err)
}
db.SetConnMaxLifetime(0)
db.SetMaxIdleConns(50)
db.SetMaxOpenConns(50)

s := &Service{db: db}

http.ListenAndServe(":8080", s)
Output:

Index

Examples

Constants

This section is empty.

Variables

View Source
var ErrConnDone = errors.New("sql: connection is already closed")

ErrConnDoneは、接続プールに返された接続で実行された操作によって返されます。

View Source
var ErrNoRows = errors.New("sql: no rows in result set")

ErrNoRowsは、 DB.QueryRow が行を返さない場合に Row.Scan によって返されます。 そのような場合、QueryRowはプレースホルダー *Row 値を返し、 このエラーはScanまで遅延されます。

View Source
var ErrTxDone = errors.New("sql: transaction has already been committed or rolled back")

ErrTxDoneは、すでにコミットまたはロールバックされたトランザクションに対して実行された操作によって返されます。

Functions

func Drivers added in v1.4.0

func Drivers() []string

Driversは、登録されたドライバーの名前のソートされたリストを返します。

func Register

func Register(name string, driver driver.Driver)

Registerは、指定された名前でデータベースドライバを利用可能にします。 Registerが同じ名前で2回呼び出された場合、またはdriverがnilの場合、 panicが発生します。

Types

type ColumnType added in v1.8.0

type ColumnType struct {
	// contains filtered or unexported fields
}

ColumnTypeは、列の名前と型を含みます。

func (*ColumnType) DatabaseTypeName added in v1.8.0

func (ci *ColumnType) DatabaseTypeName() string

DatabaseTypeNameは、列のデータベースシステム名を返します。 空の文字列が返された場合、ドライバの型名はサポートされていません。 ドライバのデータ型のリストについては、ドライバのドキュメントを参照してください。 ColumnType.Length 指定子は含まれません。 一般的な型名には、"VARCHAR"、"TEXT"、"NVARCHAR"、"DECIMAL"、"BOOL"、"INT"、"BIGINT"があります。

func (*ColumnType) DecimalSize added in v1.8.0

func (ci *ColumnType) DecimalSize() (precision, scale int64, ok bool)

DecimalSizeは、10進数型のスケールと精度を返します。 適用できない場合やサポートされていない場合は、okがfalseになります。

func (*ColumnType) Length added in v1.8.0

func (ci *ColumnType) Length() (length int64, ok bool)

Lengthは、テキストやバイナリフィールドタイプなどの可変長カラムタイプのためのカラムタイプ長を返します。 タイプ長が無制限の場合、値は math.MaxInt64 になります(データベースの制限は引き続き適用されます)。 カラムタイプが可変長でない場合、例えばintの場合、またはドライバでサポートされていない場合、okはfalseになります。

func (*ColumnType) Name added in v1.8.0

func (ci *ColumnType) Name() string

Nameは、列の名前またはエイリアスを返します。

func (*ColumnType) Nullable added in v1.8.0

func (ci *ColumnType) Nullable() (nullable, ok bool)

Nullableは、列がnullである可能性があるかどうかを報告します。 ドライバがこのプロパティをサポートしていない場合、okはfalseになります。

func (*ColumnType) ScanType added in v1.8.0

func (ci *ColumnType) ScanType() reflect.Type

ScanTypeは、 Rows.Scan を使用してスキャンするために適したGo型を返します。 ドライバがこのプロパティをサポートしていない場合、ScanTypeは空のインターフェースの型を返します。

type Conn added in v1.9.0

type Conn struct {
	// contains filtered or unexported fields
}

Connは、データベース接続プールではなく、単一のデータベース接続を表します。 特定の理由がない限り、クエリは DB から実行することをお勧めします。

Connは、 Conn.Close を呼び出して接続をデータベースプールに返す必要があります。 また、実行中のクエリと同時に呼び出すことができます。

Conn.Close の呼び出し後、接続に対するすべての操作は ErrConnDone で失敗します。

func (*Conn) BeginTx added in v1.9.0

func (c *Conn) BeginTx(ctx context.Context, opts *TxOptions) (*Tx, error)

BeginTxはトランザクションを開始します。

提供されたコンテキストは、トランザクションがコミットまたはロールバックされるまで使用されます。 コンテキストがキャンセルされると、sqlパッケージはトランザクションをロールバックします。 BeginTxに提供されたコンテキストがキャンセルされた場合、 Tx.Commit はエラーを返します。

提供された TxOptions はオプションであり、デフォルトを使用する場合はnilにすることができます。 ドライバーがサポートしていない非デフォルトの分離レベルが使用された場合、エラーが返されます。

func (*Conn) Close added in v1.9.0

func (c *Conn) Close() error

Closeは、接続を接続プールに返します。 Closeの後に行われたすべての操作は、 ErrConnDone で返されます。 Closeは、他の操作と同時に安全に呼び出すことができ、 すべての他の操作が完了するまでブロックされます。 使用されたコンテキストを最初にキャンセルしてから直接Closeを呼び出すことが役立つ場合があります。

func (*Conn) ExecContext added in v1.9.0

func (c *Conn) ExecContext(ctx context.Context, query string, args ...any) (Result, error)

ExecContextは、行を返さないクエリを実行します。 argsは、クエリ内のプレースホルダーパラメーター用です。

Example
// *DBは接続のプールです。Connを呼び出して接続を予約し、専用で使用します。
conn, err := db.Conn(ctx)
if err != nil {
	log.Fatal(err)
}
defer conn.Close() // プールに接続を返す。
id := 41
result, err := conn.ExecContext(ctx, `UPDATE balances SET balance = balance + 10 WHERE user_id = ?;`, id)
if err != nil {
	log.Fatal(err)
}
rows, err := result.RowsAffected()
if err != nil {
	log.Fatal(err)
}
if rows != 1 {
	log.Fatalf("expected single row affected, got %d rows affected", rows)
}
Output:

func (*Conn) PingContext added in v1.9.0

func (c *Conn) PingContext(ctx context.Context) error

PingContextは、データベースへの接続がまだ有効であることを確認します。

func (*Conn) PrepareContext added in v1.9.0

func (c *Conn) PrepareContext(ctx context.Context, query string) (*Stmt, error)

PrepareContextは、後でのクエリまたは実行のためにプリペアドステートメントを作成します。 返されたステートメントから複数のクエリまたは実行を同時に実行できます。 ステートメントが不要になったら、呼び出し元はステートメントの *Stmt.Close メソッドを呼び出す必要があります。

提供されたコンテキストは、ステートメントの実行ではなく、ステートメントの準備に使用されます。

func (*Conn) QueryContext added in v1.9.0

func (c *Conn) QueryContext(ctx context.Context, query string, args ...any) (*Rows, error)

QueryContextは、通常はSELECTで返される行を返すクエリを実行します。 argsは、クエリ内のプレースホルダーパラメーター用です。

func (*Conn) QueryRowContext added in v1.9.0

func (c *Conn) QueryRowContext(ctx context.Context, query string, args ...any) *Row

QueryRowContextは、最大1行を返すと予想されるクエリを実行します。 QueryRowContextは常にnil以外の値を返します。エラーは *Row.Scan メソッドが呼び出されるまで遅延されます。 クエリが行を選択しない場合、*Row.ScanErrNoRows を返します。 そうでない場合、*Row.Scan は最初に選択された行をスキャンし、残りを破棄します。

func (*Conn) Raw added in v1.13.0

func (c *Conn) Raw(f func(driverConn any) error) (err error)

Rawは、fを実行し、fの実行中に基礎となるドライバー接続を公開します。 driverConnは、fの外部で使用してはいけません。

fが返り、errが driver.ErrBadConn でない場合、 ConnConn.Close が呼び出されるまで使用可能です。

type DB

type DB struct {
	// contains filtered or unexported fields
}

DBは、ゼロ個以上の基礎接続を表すデータベースハンドルです。 複数のゴルーチンによる同時使用に対して安全です。

sqlパッケージは、接続を自動的に作成および解放します。 また、アイドル接続のフリープールを維持します。 データベースが接続ごとの状態を持つ場合、そのような状態はトランザクション(Tx)または接続(Conn)内で信頼性が高く観察できます。 DB.Begin が呼び出されると、返された Tx は単一の接続にバインドされます。 Tx.Commit または Tx.Rollback が呼び出されると、そのトランザクションの接続が DB のアイドル接続プールに返されます。 プールのサイズは DB.SetMaxIdleConns で制御できます。

func Open

func Open(driverName, dataSourceName string) (*DB, error)

Openは、データベースドライバー名とドライバー固有のデータソース名で指定されたデータベースを開きます。 通常、少なくともデータベース名と接続情報が含まれます。

ほとんどのユーザーは、 *DB を返すドライバー固有の接続ヘルパー関数を介してデータベースを開きます。 Go標準ライブラリにはデータベースドライバーは含まれていません。サードパーティのドライバーのリストについては、https://golang.org/s/sqldrivers を参照してください。

Openは、データベースへの接続を作成せずに引数を検証する場合があります。 データソース名が有効であることを確認するには、DB.Ping を呼び出します。

返された DB は、複数のゴルーチンによる同時使用に対して安全であり、アイドル接続のプールを維持します。 したがって、Open関数は1回だけ呼び出す必要があります。 DB を閉じる必要はほとんどありません。

func OpenDB added in v1.10.0

func OpenDB(c driver.Connector) *DB

OpenDBは、コネクタを使用してデータベースを開き、ドライバーが文字列ベースのデータソース名をバイパスできるようにします。

ほとんどのユーザーは、 *DB を返すドライバー固有の接続ヘルパー関数を介してデータベースを開きます。 Go標準ライブラリにはデータベースドライバーは含まれていません。サードパーティのドライバーのリストについては、https://golang.org/s/sqldrivers を参照してください。

OpenDBは、データベースへの接続を作成せずに引数を検証する場合があります。 データソース名が有効であることを確認するには、DB.Ping を呼び出します。

返された DB は、複数のゴルーチンによる同時使用に対して安全であり、アイドル接続のプールを維持します。 したがって、OpenDB関数は1回だけ呼び出す必要があります。 DB を閉じる必要はほとんどありません。

func (*DB) Begin

func (db *DB) Begin() (*Tx, error)

Beginはトランザクションを開始します。デフォルトの分離レベルはドライバーに依存します。

Beginは、内部的に context.Background を使用します。コンテキストを指定するには、 DB.BeginTx を使用してください。

func (*DB) BeginTx added in v1.8.0

func (db *DB) BeginTx(ctx context.Context, opts *TxOptions) (*Tx, error)

BeginTxはトランザクションを開始します。

提供されたコンテキストは、トランザクションがコミットまたはロールバックされるまで使用されます。 コンテキストがキャンセルされると、sqlパッケージはトランザクションをロールバックします。 BeginTxに提供されたコンテキストがキャンセルされた場合、 Tx.Commit はエラーを返します。

提供された TxOptions はオプションであり、デフォルトを使用する場合はnilにすることができます。 ドライバーがサポートしていない非デフォルトの分離レベルが使用された場合、エラーが返されます。

Example
tx, err := db.BeginTx(ctx, &sql.TxOptions{Isolation: sql.LevelSerializable})
if err != nil {
	log.Fatal(err)
}
id := 37
_, execErr := tx.Exec(`UPDATE users SET status = ? WHERE id = ?`, "paid", id)
if execErr != nil {
	_ = tx.Rollback()
	log.Fatal(execErr)
}
if err := tx.Commit(); err != nil {
	log.Fatal(err)
}
Output:

func (*DB) Close

func (db *DB) Close() error

Closeはデータベースを閉じ、新しいクエリの開始を防止します。 Closeは、サーバーで処理を開始したすべてのクエリが完了するのを待ってから終了します。

DB ハンドルは長期間生存し、多くのゴルーチンで共有されることを意図しているため、 DB をCloseすることはまれです。

func (*DB) Conn added in v1.9.0

func (db *DB) Conn(ctx context.Context) (*Conn, error)

Connは、新しい接続を開くか、接続プールから既存の接続を返して、単一の接続を返します。 Connは、接続が返されるか、ctxがキャンセルされるまでブロックされます。 同じConnで実行されるクエリは、同じデータベースセッションで実行されます。

各Connは、 Conn.Close を呼び出して使用後にデータベースプールに返す必要があります。

func (*DB) Driver

func (db *DB) Driver() driver.Driver

Driverは、データベースの基礎となるドライバーを返します。

func (*DB) Exec

func (db *DB) Exec(query string, args ...any) (Result, error)

Execは、行を返さないクエリを実行します。 argsは、クエリ内のプレースホルダーパラメーター用です。

Execは、内部的に context.Background を使用します。コンテキストを指定するには、 DB.ExecContext を使用してください。

func (*DB) ExecContext added in v1.8.0

func (db *DB) ExecContext(ctx context.Context, query string, args ...any) (Result, error)

ExecContextは、行を返さないクエリを実行します。 argsは、クエリ内のプレースホルダーパラメーター用です。

Example
id := 47
result, err := db.ExecContext(ctx, "UPDATE balances SET balance = balance + 10 WHERE user_id = ?", id)
if err != nil {
	log.Fatal(err)
}
rows, err := result.RowsAffected()
if err != nil {
	log.Fatal(err)
}
if rows != 1 {
	log.Fatalf("expected to affect 1 row, affected %d", rows)
}
Output:

func (*DB) Ping added in v1.1.0

func (db *DB) Ping() error

Pingは、データベースへの接続がまだ有効であることを確認し、必要に応じて接続を確立します。

Pingは、内部的に context.Background を使用します。コンテキストを指定するには、 DB.PingContext を使用してください。

func (*DB) PingContext added in v1.8.0

func (db *DB) PingContext(ctx context.Context) error

PingContextは、データベースへの接続がまだ有効であることを確認し、必要に応じて接続を確立します。

Example
// PingとPingContextは、データベースサーバーとの通信がまだ可能かどうかを判定するために使用されます。
//
// コマンドラインアプリケーションで使用する場合、Pingは追加クエリが可能であり、提供されたDSNが有効であることを確立するために使用できます。
//
// ロングランニングサービスで使用する場合、Pingはヘルスチェックシステムの一部となることがあります。

ctx, cancel := context.WithTimeout(ctx, 1*time.Second)
defer cancel()

status := "up"
if err := db.PingContext(ctx); err != nil {
	status = "down"
}
log.Println(status)
Output:

func (*DB) Prepare

func (db *DB) Prepare(query string) (*Stmt, error)

Prepareは、後でのクエリまたは実行のためにプリペアドステートメントを作成します。 返されたステートメントから複数のクエリまたは実行を同時に実行できます。 ステートメントが不要になったら、呼び出し元はステートメントの *Stmt.Close メソッドを呼び出す必要があります。

Prepareは、内部的に context.Background を使用します。コンテキストを指定するには、 DB.PrepareContext を使用してください。

Example
projects := []struct {
	mascot  string
	release int
}{
	{"tux", 1991},
	{"duke", 1996},
	{"gopher", 2009},
	{"moby dock", 2013},
}

stmt, err := db.Prepare("INSERT INTO projects(id, mascot, release, category) VALUES( ?, ?, ?, ? )")
if err != nil {
	log.Fatal(err)
}
defer stmt.Close() // 準備されたステートメントはサーバーリソースを消費するため、使用後は必ず閉じる必要があります。

for id, project := range projects {
	if _, err := stmt.Exec(id+1, project.mascot, project.release, "open source"); err != nil {
		log.Fatal(err)
	}
}
Output:

func (*DB) PrepareContext added in v1.8.0

func (db *DB) PrepareContext(ctx context.Context, query string) (*Stmt, error)

PrepareContextは、後でのクエリまたは実行のためにプリペアドステートメントを作成します。 返されたステートメントから複数のクエリまたは実行を同時に実行できます。 ステートメントが不要になったら、呼び出し元はステートメントの *Stmt.Close メソッドを呼び出す必要があります。

提供されたコンテキストは、ステートメントの実行ではなく、ステートメントの準備に使用されます。

func (*DB) Query

func (db *DB) Query(query string, args ...any) (*Rows, error)

QueryContextは、通常はSELECTで返される行を返すクエリを実行します。 argsは、クエリ内のプレースホルダーパラメーター用です。

QueryContextは、内部的に context.Background を使用します。コンテキストを指定するには、 DB.QueryContext を使用してください。

Example (MultipleResultSets)
age := 27
q := `
create temp table uid (id bigint); -- Create temp table for queries.
insert into uid
select id from users where age < ?; -- Populate temp table.

-- First result set.
select
	users.id, name
from
	users
	join uid on users.id = uid.id
;

-- Second result set.
select 
	ur.user, ur.role
from
	user_roles as ur
	join uid on uid.id = ur.user
;
	`
rows, err := db.Query(q, age)
if err != nil {
	log.Fatal(err)
}
defer rows.Close()

for rows.Next() {
	var (
		id   int64
		name string
	)
	if err := rows.Scan(&id, &name); err != nil {
		log.Fatal(err)
	}
	log.Printf("id %d name is %s\n", id, name)
}
if !rows.NextResultSet() {
	log.Fatalf("expected more result sets: %v", rows.Err())
}
var roleMap = map[int64]string{
	1: "user",
	2: "admin",
	3: "gopher",
}
for rows.Next() {
	var (
		id   int64
		role int64
	)
	if err := rows.Scan(&id, &role); err != nil {
		log.Fatal(err)
	}
	log.Printf("id %d has role %s\n", id, roleMap[role])
}
if err := rows.Err(); err != nil {
	log.Fatal(err)
}
Output:

func (*DB) QueryContext added in v1.8.0

func (db *DB) QueryContext(ctx context.Context, query string, args ...any) (*Rows, error)

QueryContextは、通常はSELECTで返される行を返すクエリを実行します。 argsは、クエリ内のプレースホルダーパラメーター用です。

Example
age := 27
rows, err := db.QueryContext(ctx, "SELECT name FROM users WHERE age=?", age)
if err != nil {
	log.Fatal(err)
}
defer rows.Close()
names := make([]string, 0)

for rows.Next() {
	var name string
	if err := rows.Scan(&name); err != nil {

		// スキャンエラーをチェックします。
		// クエリの行はdeferで閉じられます。
		log.Fatal(err)
	}
	names = append(names, name)
}

// データベースが書き込まれる場合は、ドライバから返されるCloseエラーを確認することを確実に行ってください。クエリは自動コミットエラーに遭遇し、変更をロールバックする必要がある場合があります。
rerr := rows.Close()
if rerr != nil {
	log.Fatal(rerr)
}

// Rows.ErrはRows.Scanで遭遇した最後のエラーを報告します。
if err := rows.Err(); err != nil {
	log.Fatal(err)
}
fmt.Printf("%s are %d years old", strings.Join(names, ", "), age)
Output:

func (*DB) QueryRow

func (db *DB) QueryRow(query string, args ...any) *Row

QueryRowは、最大1行を返すと予想されるクエリを実行します。 QueryRowは常にnil以外の値を返します。エラーは Row のScanメソッドが呼び出されるまで遅延されます。 クエリが行を選択しない場合、*Row.ScanErrNoRows を返します。 そうでない場合、*Row.Scan は最初に選択された行をスキャンし、残りを破棄します。

QueryRowは、内部的に context.Background を使用します。コンテキストを指定するには、 [DBQueryRowContext] を使用してください。

func (*DB) QueryRowContext added in v1.8.0

func (db *DB) QueryRowContext(ctx context.Context, query string, args ...any) *Row

QueryRowContextは、最大1行を返すと予想されるクエリを実行します。 QueryRowContextは常にnil以外の値を返します。エラーは Row のScanメソッドが呼び出されるまで遅延されます。 クエリが行を選択しない場合、*Row.ScanErrNoRows を返します。 そうでない場合、*Row.Scan は最初に選択された行をスキャンし、残りを破棄します。

Example
id := 123
var username string
var created time.Time
err := db.QueryRowContext(ctx, "SELECT username, created_at FROM users WHERE id=?", id).Scan(&username, &created)
switch {
case err == sql.ErrNoRows:
	log.Printf("no user with id %d\n", id)
case err != nil:
	log.Fatalf("query error: %v\n", err)
default:
	log.Printf("username is %q, account created on %s\n", username, created)
}
Output:

func (*DB) SetConnMaxIdleTime added in v1.15.0

func (db *DB) SetConnMaxIdleTime(d time.Duration)

SetConnMaxIdleTimeは、接続がアイドル状態になっている最大時間を設定します。

期限切れの接続は再利用前に遅延して閉じることができます。

d <= 0の場合、接続のアイドル時間により接続が閉じられることはありません。

func (*DB) SetConnMaxLifetime added in v1.6.0

func (db *DB) SetConnMaxLifetime(d time.Duration)

SetConnMaxLifetimeは、接続が再利用される最大時間を設定します。

期限切れの接続は再利用前に遅延して閉じることができます。

d <= 0の場合、接続の年齢により接続が閉じられることはありません。

func (*DB) SetMaxIdleConns added in v1.1.0

func (db *DB) SetMaxIdleConns(n int)

SetMaxIdleConnsは、アイドル接続プール内の最大接続数を設定します。

MaxOpenConnsが0より大きく、新しいMaxIdleConnsより小さい場合、 新しいMaxIdleConnsはMaxOpenConnsの制限に合わせて減少します。

n <= 0の場合、アイドル接続は保持されません。

デフォルトの最大アイドル接続数は現在2です。将来のリリースで変更される可能性があります。

func (*DB) SetMaxOpenConns added in v1.2.0

func (db *DB) SetMaxOpenConns(n int)

SetMaxOpenConnsは、データベースへの最大オープン接続数を設定します。

MaxIdleConnsが0より大きく、新しいMaxOpenConnsより小さい場合、 新しいMaxIdleConnsはMaxOpenConnsの制限に合わせて減少します。

n <= 0の場合、オープン接続数に制限はありません。 デフォルトは0(無制限)です。

func (*DB) Stats added in v1.5.0

func (db *DB) Stats() DBStats

Statsは、データベースの統計情報を返します。

type DBStats added in v1.5.0

type DBStats struct {
	MaxOpenConnections int

	// Pool Status
	OpenConnections int
	InUse           int
	Idle            int

	// Counters
	WaitCount         int64
	WaitDuration      time.Duration
	MaxIdleClosed     int64
	MaxIdleTimeClosed int64
	MaxLifetimeClosed int64
}

DBStatsには、データベースの統計情報が含まれます。

type IsolationLevel added in v1.8.0

type IsolationLevel int

IsolationLevelは、 TxOptions で使用されるトランザクション分離レベルです。

const (
	LevelDefault IsolationLevel = iota
	LevelReadUncommitted
	LevelReadCommitted
	LevelWriteCommitted
	LevelRepeatableRead
	LevelSnapshot
	LevelSerializable
	LevelLinearizable
)

DB.BeginTx でドライバーがサポートする可能性のあるさまざまな分離レベル。 ドライバーが特定の分離レベルをサポートしていない場合、エラーが返される場合があります。

https://en.wikipedia.org/wiki/Isolation_(database_systems)#Isolation_levels を参照してください。

func (IsolationLevel) String added in v1.11.0

func (i IsolationLevel) String() string

Stringはトランザクション分離レベルの名前を返します。

type NamedArg added in v1.8.0

type NamedArg struct {

	// Nameはパラメータプレースホルダーの名前です。
	//
	// 空の場合、引数リストの序数が使用されます。
	//
	// Nameには、シンボル接頭辞を省略する必要があります。
	Name string

	// Valueはパラメータの値です。
	// クエリ引数と同じ値型が割り当てられる可能性があります。
	Value any
	// contains filtered or unexported fields
}

NamedArgは名前付き引数です。NamedArg値は、 DB.Query または DB.Exec の引数として使用でき、 SQLステートメントの対応する名前付きパラメータにバインドされます。

NamedArg値をより簡潔に作成する方法については、 Named 関数を参照してください。

func Named added in v1.8.0

func Named(name string, value any) NamedArg

Namedは、 NamedArg 値をより簡潔に作成する方法を提供します。

使用例:

db.ExecContext(ctx, `
    delete from Invoice
    where
        TimeCreated < @end
        and TimeCreated >= @start;`,
    sql.Named("start", startTime),
    sql.Named("end", endTime),
)

type Null added in v1.22.0

type Null[T any] struct {
	V     T
	Valid bool
}

Nullは、nullである可能性がある値を表します。 Nullは Scanner インターフェースを実装するため、 スキャン先として使用できます。

var s Null[string]
err := db.QueryRow("SELECT name FROM foo WHERE id=?", id).Scan(&s)
...
if s.Valid {
   // use s.V
} else {
   // NULL value
}

func (*Null[T]) Scan added in v1.22.0

func (n *Null[T]) Scan(value any) error

func (Null[T]) Value added in v1.22.0

func (n Null[T]) Value() (driver.Value, error)

type NullBool

type NullBool struct {
	Bool  bool
	Valid bool
}

NullBoolは、nullである可能性があるboolを表します。 NullBoolは Scanner インターフェースを実装するため、 NullString と同様にスキャン先として使用できます。

func (*NullBool) Scan

func (n *NullBool) Scan(value any) error

Scanは Scanner インターフェースを実装します。

func (NullBool) Value

func (n NullBool) Value() (driver.Value, error)

Valueは、 driver.Valuer インターフェースを実装します。

type NullByte added in v1.17.0

type NullByte struct {
	Byte  byte
	Valid bool
}

NullByteは、nullである可能性があるバイトを表します。 NullByteは Scanner インターフェースを実装するため、 NullString と同様にスキャン先として使用できます。

func (*NullByte) Scan added in v1.17.0

func (n *NullByte) Scan(value any) error

Scanは Scanner インターフェースを実装します。

func (NullByte) Value added in v1.17.0

func (n NullByte) Value() (driver.Value, error)

Valueは、 driver.Valuer インターフェースを実装します。

type NullFloat64

type NullFloat64 struct {
	Float64 float64
	Valid   bool
}

NullFloat64は、nullである可能性があるfloat64を表します。 NullFloat64は Scanner インターフェースを実装するため、 NullString と同様にスキャン先として使用できます。

func (*NullFloat64) Scan

func (n *NullFloat64) Scan(value any) error

Scanは Scanner インターフェースを実装します。

func (NullFloat64) Value

func (n NullFloat64) Value() (driver.Value, error)

Valueは、 driver.Valuer インターフェースを実装します。

type NullInt16 added in v1.17.0

type NullInt16 struct {
	Int16 int16
	Valid bool
}

NullInt16は、nullである可能性があるint16を表します。 NullInt16は Scanner インターフェースを実装するため、 NullString と同様にスキャン先として使用できます。

func (*NullInt16) Scan added in v1.17.0

func (n *NullInt16) Scan(value any) error

Scanは Scanner インターフェースを実装します。

func (NullInt16) Value added in v1.17.0

func (n NullInt16) Value() (driver.Value, error)

Valueは、 driver.Valuer インターフェースを実装します。

type NullInt32 added in v1.13.0

type NullInt32 struct {
	Int32 int32
	Valid bool
}

NullInt32は、nullである可能性があるint32を表します。 NullInt32は Scanner インターフェースを実装するため、 NullStringと同様にスキャン先として使用できます。

func (*NullInt32) Scan added in v1.13.0

func (n *NullInt32) Scan(value any) error

Scanは Scanner インターフェースを実装します。

func (NullInt32) Value added in v1.13.0

func (n NullInt32) Value() (driver.Value, error)

Valueは、 driver.Valuer インターフェースを実装します。

type NullInt64

type NullInt64 struct {
	Int64 int64
	Valid bool
}

NullInt64は、nullである可能性があるint64を表します。 NullInt64はScannerインターフェースを実装するため、 NullString と同様にスキャン先として使用できます。

func (*NullInt64) Scan

func (n *NullInt64) Scan(value any) error

Scanは Scanner インターフェースを実装します。

func (NullInt64) Value

func (n NullInt64) Value() (driver.Value, error)

Valueは、 driver.Valuer インターフェースを実装します。

type NullString

type NullString struct {
	String string
	Valid  bool
}

NullStringは、nullである可能性がある文字列を表します。 NullStringは Scanner インターフェースを実装するため、 スキャン先として使用できます。

var s NullString
err := db.QueryRow("SELECT name FROM foo WHERE id=?", id).Scan(&s)
...
if s.Valid {
   // use s.String
} else {
   // NULL value
}

func (*NullString) Scan

func (ns *NullString) Scan(value any) error

Scanは Scanner インターフェースを実装します。

func (NullString) Value

func (ns NullString) Value() (driver.Value, error)

Valueは、 driver.Valuer インターフェースを実装します。

type NullTime added in v1.13.0

type NullTime struct {
	Time  time.Time
	Valid bool
}

NullTimeは、nullである可能性がある time.Time を表します。 NullTimeは Scanner インターフェースを実装するため、 NullString と同様にスキャン先として使用できます。

func (*NullTime) Scan added in v1.13.0

func (n *NullTime) Scan(value any) error

Scanは Scanner インターフェースを実装します。

func (NullTime) Value added in v1.13.0

func (n NullTime) Value() (driver.Value, error)

Valueは、 driver.Valuer インターフェースを実装します。

type Out added in v1.9.0

type Out struct {

	// Destは、ストアドプロシージャのOUTPUTパラメータの結果に設定される値へのポインタです。
	Dest any

	// Inは、パラメータがINOUTパラメータであるかどうかを示します。
	// その場合、ストアドプロシージャへの入力値はDestのポインタの参照解除された値であり、
	// その後、出力値で置き換えられます。
	In bool
	// contains filtered or unexported fields
}

Outは、ストアドプロシージャからOUTPUT値パラメータを取得するために使用できます。

すべてのドライバーとデータベースがOUTPUT値パラメータをサポートしているわけではありません。

使用例:

var outArg string
_, err := db.ExecContext(ctx, "ProcName", sql.Named("Arg1", sql.Out{Dest: &outArg}))

type RawBytes

type RawBytes []byte

RawBytesは、データベース自体が所有するメモリへの参照を保持するバイトスライスです。 RawBytesに対して Rows.Scan を実行した後、スライスは次の Rows.NextRows.Scan、または Rows.Close の呼び出しまでのみ有効です。

type Result

type Result interface {
	LastInsertId() (int64, error)

	RowsAffected() (int64, error)
}

Resultは、実行されたSQLコマンドを要約します。

type Row

type Row struct {
	// contains filtered or unexported fields
}

Rowは、単一の行を選択するために DB.QueryRow を呼び出した結果です。

func (*Row) Err added in v1.15.0

func (r *Row) Err() error

Errは、 Row.Scan を呼び出さずにクエリエラーをチェックするための方法を提供します。 Errは、クエリを実行する際に遭遇したエラー(ある場合)を返します。 このエラーがnilでない場合、このエラーは Row.Scan からも返されます。

func (*Row) Scan

func (r *Row) Scan(dest ...any) error

Scanは、一致する行から列をdestが指す値にコピーします。 詳細については、 Rows.Scan のドキュメントを参照してください。 クエリに複数の行が一致する場合、Scanは最初の行を使用し、残りを破棄します。 クエリに一致する行がない場合、Scanは ErrNoRows を返します。

type Rows

type Rows struct {
	// contains filtered or unexported fields
}

Rowsはクエリの結果です。そのカーソルは、結果セットの最初の行の前に開始します。 行から行に進むには、 Rows.Next を使用してください。

Example
age := 27
rows, err := db.QueryContext(ctx, "SELECT name FROM users WHERE age=?", age)
if err != nil {
	log.Fatal(err)
}
defer rows.Close()

names := make([]string, 0)
for rows.Next() {
	var name string
	if err := rows.Scan(&name); err != nil {
		log.Fatal(err)
	}
	names = append(names, name)
}
// 行を反復してエラーをチェックします。
if err := rows.Err(); err != nil {
	log.Fatal(err)
}
log.Printf("%s are %d years old", strings.Join(names, ", "), age)
Output:

func (*Rows) Close

func (rs *Rows) Close() error

Closeは、 Rows を閉じ、以降の列挙を防止します。 Rows.Next がfalseを返し、さらに結果セットがない場合、 Rows は自動的に閉じられ、 Rows.Err の結果を確認するだけで十分です。 Closeは冪等性があり、 Rows.Err の結果に影響を与えません。

func (*Rows) ColumnTypes added in v1.8.0

func (rs *Rows) ColumnTypes() ([]*ColumnType, error)

ColumnTypesは、列の型、長さ、null可能性などの列情報を返します。 一部の情報は、一部のドライバから利用できない場合があります。

func (*Rows) Columns

func (rs *Rows) Columns() ([]string, error)

Columnsは列名を返します。 Rowsが閉じられている場合、Columnsはエラーを返します。

func (*Rows) Err

func (rs *Rows) Err() error

Errは、反復中に遭遇したエラー(ある場合)を返します。 明示的または暗黙的な Rows.Close の後にErrを呼び出すことができます。

func (*Rows) Next

func (rs *Rows) Next() bool

Nextは、 Rows.Scan メソッドで読み取る次の結果行を準備します。 成功した場合はtrue、次の結果行がない場合や準備中にエラーが発生した場合はfalseを返します。 2つの場合を区別するには、 Rows.Err を参照する必要があります。

最初の呼び出しを含め、すべての Rows.Scan 呼び出しは、 Rows.Next の呼び出しに先立っている必要があります。

func (*Rows) NextResultSet added in v1.8.0

func (rs *Rows) NextResultSet() bool

NextResultSetは、次の結果セットの読み取りの準備をします。 さらに結果セットがある場合はtrue、それ以外の場合はfalseを報告します。 または、それに進む際にエラーが発生した場合はfalseを報告します。 2つの場合を区別するには、 Rows.Err を参照する必要があります。

NextResultSetを呼び出した後、スキャンする前に常に Rows.Next メソッドを呼び出す必要があります。 さらに結果セットがある場合、結果セットに行がない場合があります。

func (*Rows) Scan

func (rs *Rows) Scan(dest ...any) error

Scanは、現在の行の列をdestが指す値にコピーします。 destの数は Rows の列数と同じでなければなりません。

Scanは、データベースから読み取った列を、以下の共通のGoの型およびsqlパッケージで提供される特殊な型に変換します。

*string
*[]byte
*int, *int8, *int16, *int32, *int64
*uint, *uint8, *uint16, *uint32, *uint64
*bool
*float32, *float64
*interface{}
*RawBytes
*Rows (カーソル値)
Scanner を実装する任意の型(Scannerドキュメントを参照)

最も単純な場合、ソース列の値の型が整数、ブール、または文字列型Tで、destが型*Tの場合、Scanは単にポインタを介して値を割り当てます。

Scanは、文字列と数値型の間でも変換しますが、情報が失われない場合に限ります。Scanは、数値データベース列からスキャンされたすべての数値を*stringに文字列化しますが、数値型へのスキャンはオーバーフローのチェックが行われます。例えば、値が300のfloat64または値が"300"の文字列はuint16にスキャンできますが、uint8にはスキャンできません。ただし、float64(255)または"255"はuint8にスキャンできます。一部のfloat64数値を文字列に変換するスキャンは、文字列化すると情報が失われる場合があります。一般的には、浮動小数点列を*float64にスキャンします。

dest引数の型が*[]byteの場合、Scanは対応するデータのコピーをその引数に保存します。コピーは呼び出し元が所有し、修正して無期限に保持できます。コピーを回避するには、代わりに *RawBytes の引数を使用します。RawBytes の使用制限については、 RawBytes のドキュメントを参照してください。

引数の型が*interface{}の場合、Scanは変換せずに基礎ドライバが提供する値をコピーします。[]byte型のソース値から*interface{}にスキャンする場合、スライスのコピーが作成され、呼び出し元が結果を所有します。

time.Time 型のソース値は、*time.Time、*interface{}、*string、または*[]byte型の値にスキャンできます。後者2つに変換する場合、time.RFC3339Nano が使用されます。

bool型のソース値は、*bool、*interface{}、*string、*[]byte、または *RawBytes 型にスキャンできます。

*boolにスキャンする場合、ソースはtrue、false、1、0、または strconv.ParseBool で解析可能な文字列入力である必要があります。

Scanは、クエリから返されたカーソル(例:"select cursor(select * from my_table) from dual")を、自体からスキャンできる *Rows 値に変換できます。親の *Rows が閉じられると、親の選択クエリはカーソル *Rows を閉じます。

最初の引数のいずれかがエラーを返す Scanner を実装している場合、そのエラーは返されたエラーにラップされます。

type Scanner

type Scanner interface {
	Scan(src any) error
}

Scanner is an interface used by Rows.Scan.

type Stmt

type Stmt struct {
	// contains filtered or unexported fields
}

Stmtは、プリペアドステートメントです。 Stmtは、複数のゴルーチンによる同時使用に対して安全です。

Stmtが Tx または Conn で準備された場合、それは1つの基礎となる接続に永久にバインドされます。 Tx または Conn が閉じられると、Stmtは使用できなくなり、すべての操作がエラーを返します。 Stmtが DB で準備された場合、それは DB の寿命の間使用可能です。 Stmtが新しい基礎となる接続で実行する必要がある場合、自動的に新しい接続で自己準備します。

Example
// 通常使用時には、プロセスの開始時に1つのStmtを作成します。
stmt, err := db.PrepareContext(ctx, "SELECT username FROM users WHERE id = ?")
if err != nil {
	log.Fatal(err)
}
defer stmt.Close()

// クエリを発行する必要があるたびに再利用してください。
id := 43
var username string
err = stmt.QueryRowContext(ctx, id).Scan(&username)
switch {
case err == sql.ErrNoRows:
	log.Fatalf("no user with id %d", id)
case err != nil:
	log.Fatal(err)
default:
	log.Printf("username is %s\n", username)
}
Output:

func (*Stmt) Close

func (s *Stmt) Close() error

Closeはステートメントを閉じます。

func (*Stmt) Exec

func (s *Stmt) Exec(args ...any) (Result, error)

Execは、指定された引数を使用してプリペアドステートメントを実行し、 ステートメントの影響を要約する Result を返します。

Execは、内部的に context.Background を使用します。コンテキストを指定するには、 Stmt.ExecContext を使用してください。

func (*Stmt) ExecContext added in v1.8.0

func (s *Stmt) ExecContext(ctx context.Context, args ...any) (Result, error)

ExecContextは、指定された引数を使用してプリペアドステートメントを実行し、 ステートメントの影響を要約する Result を返します。

func (*Stmt) Query

func (s *Stmt) Query(args ...any) (*Rows, error)

Queryは、指定された引数を使用してプリペアドクエリステートメントを実行し、 クエリ結果を*Rowsとして返します。

Queryは、内部的に context.Background を使用します。コンテキストを指定するには、 Stmt.QueryContext を使用してください。

func (*Stmt) QueryContext added in v1.8.0

func (s *Stmt) QueryContext(ctx context.Context, args ...any) (*Rows, error)

QueryContextは、指定された引数を使用してプリペアドクエリステートメントを実行し、 クエリ結果を *Rows として返します。

func (*Stmt) QueryRow

func (s *Stmt) QueryRow(args ...any) *Row

QueryRowは、指定された引数を使用してプリペアドクエリステートメントを実行し、 ステートメントの実行中にエラーが発生した場合、そのエラーは常にnil以外の *Row のScan呼び出しによって返されます。 クエリが行を選択しない場合、*Row.ScanErrNoRows を返します。 そうでない場合、*Row.Scan のScanは最初に選択された行をスキャンし、残りを破棄します。

使用例:

var name string
err := nameByUseridStmt.QueryRow(id).Scan(&name)

QueryRowは、内部的に context.Background を使用します。コンテキストを指定するには、 Stmt.QueryRowContext を使用してください。

func (*Stmt) QueryRowContext added in v1.8.0

func (s *Stmt) QueryRowContext(ctx context.Context, args ...any) *Row

QueryRowContextは、指定された引数を使用してプリペアドクエリステートメントを実行し、 ステートメントの実行中にエラーが発生した場合、そのエラーは常にnil以外の *Row のScan呼び出しによって返されます。 クエリが行を選択しない場合、*Row.ScanErrNoRows を返します。 そうでない場合、*Row.Scan は最初に選択された行をスキャンし、残りを破棄します。

Example
// 通常の使用では、プロセス開始時に1つのStmtを作成します。
stmt, err := db.PrepareContext(ctx, "SELECT username FROM users WHERE id = ?")
if err != nil {
	log.Fatal(err)
}
defer stmt.Close()

// クエリを発行するたびに再利用してください。
id := 43
var username string
err = stmt.QueryRowContext(ctx, id).Scan(&username)
switch {
case err == sql.ErrNoRows:
	log.Fatalf("no user with id %d", id)
case err != nil:
	log.Fatal(err)
default:
	log.Printf("username is %s\n", username)
}
Output:

type Tx

type Tx struct {
	// contains filtered or unexported fields
}

Txは、進行中のデータベーストランザクションです。

トランザクションは、 Tx.Commit または Tx.Rollback の呼び出しで終了する必要があります。

Tx.Commit または Tx.Rollback の呼び出し後、トランザクション上のすべての操作は ErrTxDone で失敗します。

トランザクションの Tx.Prepare または Tx.Stmt メソッドを呼び出して準備されたステートメントは、 Tx.Commit または Tx.Rollback の呼び出しで閉じられます。

func (*Tx) Commit

func (tx *Tx) Commit() error

Commitはトランザクションをコミットします。

func (*Tx) Exec

func (tx *Tx) Exec(query string, args ...any) (Result, error)

Execは、行を返さないクエリを実行します。 例えば、INSERTやUPDATEです。

Execは、内部的に context.Background を使用します。コンテキストを指定するには、 Tx.ExecContext を使用してください。

func (*Tx) ExecContext added in v1.8.0

func (tx *Tx) ExecContext(ctx context.Context, query string, args ...any) (Result, error)

ExecContextは、行を返さないクエリを実行します。 例えば、INSERTやUPDATEです。

Example
tx, err := db.BeginTx(ctx, &sql.TxOptions{Isolation: sql.LevelSerializable})
if err != nil {
	log.Fatal(err)
}
id := 37
_, execErr := tx.ExecContext(ctx, "UPDATE users SET status = ? WHERE id = ?", "paid", id)
if execErr != nil {
	if rollbackErr := tx.Rollback(); rollbackErr != nil {
		log.Fatalf("update failed: %v, unable to rollback: %v\n", execErr, rollbackErr)
	}
	log.Fatalf("update failed: %v", execErr)
}
if err := tx.Commit(); err != nil {
	log.Fatal(err)
}
Output:

func (*Tx) Prepare

func (tx *Tx) Prepare(query string) (*Stmt, error)

Prepareは、トランザクション内で使用するためのプリペアドステートメントを作成します。

返されたステートメントはトランザクション内で動作し、トランザクションがコミットまたはロールバックされたときに閉じられます。

このトランザクションで既存のプリペアドステートメントを使用するには、 Tx.Stmt を参照してください。

Prepareは、内部的に context.Background を使用します。コンテキストを指定するには、 Tx.PrepareContext を使用してください。

Example
projects := []struct {
	mascot  string
	release int
}{
	{"tux", 1991},
	{"duke", 1996},
	{"gopher", 2009},
	{"moby dock", 2013},
}

tx, err := db.Begin()
if err != nil {
	log.Fatal(err)
}
defer tx.Rollback() // もし関数内で後でトランザクションがコミットされた場合は、ロールバックは無視されます。

stmt, err := tx.Prepare("INSERT INTO projects(id, mascot, release, category) VALUES( ?, ?, ?, ? )")
if err != nil {
	log.Fatal(err)
}
defer stmt.Close() // プリペアドステートメントはサーバーのリソースを使用するため、使用後は閉じるべきです。

for id, project := range projects {
	if _, err := stmt.Exec(id+1, project.mascot, project.release, "open source"); err != nil {
		log.Fatal(err)
	}
}
if err := tx.Commit(); err != nil {
	log.Fatal(err)
}
Output:

func (*Tx) PrepareContext added in v1.8.0

func (tx *Tx) PrepareContext(ctx context.Context, query string) (*Stmt, error)

PrepareContextは、トランザクション内で使用するためのプリペアドステートメントを作成します。

返されたステートメントはトランザクション内で動作し、トランザクションがコミットまたはロールバックされたときに閉じられます。

このトランザクションで既存のプリペアドステートメントを使用するには、 Tx.Stmt を参照してください。

提供されたコンテキストは、ステートメントの実行ではなく、ステートメントの準備に使用されます。 返されたステートメントはトランザクションコンテキストで実行されます。

func (*Tx) Query

func (tx *Tx) Query(query string, args ...any) (*Rows, error)

Queryは、通常はSELECTで返される行を返すクエリを実行します。

Queryは、内部的に context.Background を使用します。コンテキストを指定するには、 Tx.QueryContext を使用してください。

func (*Tx) QueryContext added in v1.8.0

func (tx *Tx) QueryContext(ctx context.Context, query string, args ...any) (*Rows, error)

QueryContext executes a query that returns rows, typically a SELECT.

func (*Tx) QueryRow

func (tx *Tx) QueryRow(query string, args ...any) *Row

QueryRowは、最大1行を返すと予想されるクエリを実行します。 QueryRowは常にnil以外の値を返します。エラーは Row のScanメソッドが呼び出されるまで遅延されます。 クエリが行を選択しない場合、*Row.ScanErrNoRows を返します。 そうでない場合、*Row.Scan は最初に選択された行をスキャンし、残りを破棄します。

QueryRowは、内部的に context.Background を使用します。コンテキストを指定するには、 Tx.QueryRowContext を使用してください。

func (*Tx) QueryRowContext added in v1.8.0

func (tx *Tx) QueryRowContext(ctx context.Context, query string, args ...any) *Row

QueryRowContextは、最大1行を返すと予想されるクエリを実行します。 QueryRowContextは常にnil以外の値を返します。エラーは Row のScanメソッドが呼び出されるまで遅延されます。 クエリが行を選択しない場合、*Row.ScanErrNoRows を返します。 そうでない場合、*Row.Scan は最初に選択された行をスキャンし、残りを破棄します。

func (*Tx) Rollback

func (tx *Tx) Rollback() error

Rollbackはトランザクションを中止します。

Example
tx, err := db.BeginTx(ctx, &sql.TxOptions{Isolation: sql.LevelSerializable})
if err != nil {
	log.Fatal(err)
}
id := 53
_, err = tx.ExecContext(ctx, "UPDATE drivers SET status = ? WHERE id = ?;", "assigned", id)
if err != nil {
	if rollbackErr := tx.Rollback(); rollbackErr != nil {
		log.Fatalf("update drivers: unable to rollback: %v", rollbackErr)
	}
	log.Fatal(err)
}
_, err = tx.ExecContext(ctx, "UPDATE pickups SET driver_id = $1;", id)
if err != nil {
	if rollbackErr := tx.Rollback(); rollbackErr != nil {
		log.Fatalf("update failed: %v, unable to back: %v", err, rollbackErr)
	}
	log.Fatal(err)
}
if err := tx.Commit(); err != nil {
	log.Fatal(err)
}
Output:

func (*Tx) Stmt

func (tx *Tx) Stmt(stmt *Stmt) *Stmt

Stmtは、既存のステートメントからトランザクション固有のプリペアドステートメントを返します。

例:

updateMoney, err := db.Prepare("UPDATE balance SET money=money+? WHERE id=?")
...
tx, err := db.Begin()
...
res, err := tx.Stmt(updateMoney).Exec(123.45, 98293203)

返されたステートメントはトランザクション内で動作し、トランザクションがコミットまたはロールバックされたときに閉じられます。

Stmtは、内部的に context.Background を使用します。コンテキストを指定するには、 Tx.StmtContext を使用してください。

func (*Tx) StmtContext added in v1.8.0

func (tx *Tx) StmtContext(ctx context.Context, stmt *Stmt) *Stmt

StmtContextは、既存のステートメントからトランザクション固有のプリペアドステートメントを返します。

例:

updateMoney, err := db.Prepare("UPDATE balance SET money=money+? WHERE id=?")
...
tx, err := db.Begin()
...
res, err := tx.StmtContext(ctx, updateMoney).Exec(123.45, 98293203)

提供されたコンテキストはステートメントの実行ではなく、ステートメントの準備に使用されます。

返されたステートメントはトランザクション内で動作し、トランザクションがコミットまたはロールバックされたときに閉じられます。

type TxOptions added in v1.8.0

type TxOptions struct {
	// Isolationはトランザクション分離レベルです。
	// ゼロの場合、ドライバーまたはデータベースのデフォルトレベルが使用されます。
	Isolation IsolationLevel
	ReadOnly  bool
}

TxOptionsは、 DB.BeginTx で使用されるトランザクションオプションを保持します。

Directories

Path Synopsis
Package driverは、package sqlによって使用されるデータベースドライバが実装するインターフェースを定義します。
Package driverは、package sqlによって使用されるデータベースドライバが実装するインターフェースを定義します。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL