Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bilakah transaksi goose akan diserahkan?

Bilakah transaksi goose akan diserahkan?

王林
王林ke hadapan
2024-02-08 21:54:20562semak imbas

go goose 事务什么时候提交?

editor php Yuzai berada di sini untuk menjawab soalan biasa untuk semua orang: "Bilakah transaksi goose akan diserahkan dalam bahasa Go, penyerahan transaksi bergantung pada pemacu pangkalan data tertentu. Secara umumnya, apabila melakukan operasi komit transaksi, pangkalan data akan menyerahkan semua operasi pengubahsuaian transaksi semasa kepada pangkalan data pada satu masa. Ini memastikan atomicity transaksi, iaitu, sama ada semua komitmen berjaya atau semua rollback gagal. Oleh itu, masa penghantaran transaksi adalah apabila operasi komit transaksi dilakukan, bukan pada permulaan atau akhir transaksi. Untuk kaedah penggunaan khusus, sila rujuk dokumentasi pemacu pangkalan data yang berkaitan.

Isi soalan

  • Saya mempunyai beberapa kod yang perlu dijalankan dalam tx seperti yang ditunjukkan di bawah
  • Saya menghasilkan migrasi go sql seperti yang diterangkan dalam dokumentasi rasmi go goose

Soalan saya ialah:

  • Bilakah transaksi ini sebenarnya commited komited kepada pangkalan data?
  • Saya terpaksa menggunakan tx.commit() untuk menyerahkan penghijrahan. Berikut ialah fail migrasi saya dalam perjalanan:
func Up00002(tx *sql.Tx) error {
    _, err := tx.Exec("UPDATE users SET username='admin' WHERE username='root';")
    if err != nil {
        return err
    }

    if err = tx.Commit(); err != nil {
        return fmt.Errorf("error during committing the transaction: %w", err)
    }


    return nil
}

Saya tidak dapat menjalankan migrasi di atas selepas bahagian down kerana apabila saya menjalankannya, saya mendapat errtxdone (sumber). Saya masih mahu menjalankan go migration up00002 beberapa kali (untuk ujian). Bagaimana saya boleh melakukan ini? Apa salah saya di sini? . Panggilan AddMigrations - ini dikendalikan secara dalaman oleh down 部分之后运行上述迁移,因为当我运行它们时,我得到了 errtxdone (源)。我仍然想多次运行 go 迁移 up00002 (用于测试)。我怎样才能做到这一点?我在这里做错了什么?

解决方法

因此,只需浏览他们的文档此处即可显示提交已经在 AddMigrations 调用中发生 - 这是使用 ofc 事务,由 go goose menggunakan transaksi ofc - sangat bagus :)

Hal yang sama berlaku untuk sql, seperti yang dapat kita lihat di sini

pkg juga menyediakan --no-transaction选项,我们可以使用它来完全控制db objek - hebat!

Atas ialah kandungan terperinci Bilakah transaksi goose akan diserahkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam