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.
tx
seperti yang ditunjukkan di bawahgo goose
Soalan saya ialah:
commited
komited kepada pangkalan data? 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!