ホームページ >バックエンド開発 >Golang >go goose トランザクションはいつ送信されますか?

go goose トランザクションはいつ送信されますか?

王林
王林転載
2024-02-08 21:54:20621ブラウズ

go goose 事务什么时候提交?

php エディターの Yuzai が、「Go Goose トランザクションはいつ送信されますか?」というよくある質問に答えます。Go 言語では、トランザクションの送信は特定のデータベース ドライバーに依存します。 。一般に、トランザクションのコミット操作を実行するとき、データベースは現在のトランザクションのすべての変更操作を一度にデータベースに送信します。これにより、トランザクションのアトミック性、つまりすべてのコミットが成功するかすべてのロールバックが失敗することが保証されます。したがって、トランザクションの送信時刻は、トランザクションの開始時や終了時ではなく、トランザクションのコミット操作が実行されるときです。具体的な使用方法については、関連するデータベース ドライバーのドキュメントを参照してください。

質問内容

  • 以下に示すように、tx で実行する必要があるコードがいくつかあります。
  • go goose
  • の公式ドキュメントの説明に従って go sql 移行を生成しました。
  • 私の質問は次のとおりです:

これらのトランザクションが実際にデータベースに
    コミットされるのはいつですか?
  • 移行をコミットするために、tx.commit()
  • の使用を強制します。これは私の go での移行ファイルです:
  • リーリー 上記の移行を実行すると
  • errtxdone
(ソース) が発生するため、

down 部分の後には実行できません。私はまだ、 go migration up00002 を複数回実行したいと考えています (テストのため)。これどうやってするの?ここで私は何を間違っているのでしょうか? 回避策

ドキュメントを参照するだけで、

ここ

でコミットがすでに

AddMigrations 呼び出しで行われていることがわかります。これは ofc トランザクションを使用しています。 go goose によって内部的に処理されます - 非常に素晴らしい :) ここでわかるように、SQL にも同じことが当てはまります。

pkg には --no-transaction オプションも用意されており、これを使用して

db

オブジェクトを完全に制御できます。素晴らしいです。

以上がgo goose トランザクションはいつ送信されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。