Maison  >  Article  >  développement back-end  >  Quand la transaction Go Goose sera-t-elle soumise ?

Quand la transaction Go Goose sera-t-elle soumise ?

王林
王林avant
2024-02-08 21:54:20562parcourir

go goose 事务什么时候提交?

l'éditeur php Yuzai est là pour répondre à une question commune à tout le monde : "Quand la transaction go goose sera-t-elle soumise ?" De manière générale, lors de l'exécution d'une opération de validation de transaction, la base de données soumettra toutes les opérations de modification de la transaction en cours à la base de données en même temps. Cela garantit l'atomicité de la transaction, c'est-à-dire que soit toutes les validations réussissent, soit toutes les annulations échouent. Par conséquent, l’heure de soumission de la transaction correspond au moment où l’opération de validation de la transaction est effectuée, et non au début ou à la fin de la transaction. Pour les méthodes d'utilisation spécifiques, veuillez vous référer à la documentation du pilote de base de données concerné.

Contenu des questions

  • J'ai du code qui doit être exécuté tx comme indiqué ci-dessous
  • J'ai généré une migration go sql comme décrit dans la documentation officielle de go goose

Ma question est la suivante :

  • Quand ces transactions sont-elles réellement commited enregistrées dans la base de données ?
  • J'ai obligé d'utiliser tx.commit() pour soumettre la migration. Voici mon dossier de migration en go :
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
}

Je ne peux pas exécuter les migrations ci-dessus après la section down car lorsque je les exécute, j'obtiens errtxdone (source). Je souhaite toujours exécuter la migration go up00002 plusieurs fois (à des fins de test). Comment puis-je faire ceci? Qu'est-ce que je fais de mal ici ? down 部分之后运行上述迁移,因为当我运行它们时,我得到了 errtxdone (源)。我仍然想多次运行 go 迁移 up00002 (用于测试)。我怎样才能做到这一点?我在这里做错了什么?

解决方法

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

Solution de contournement

Il suffit donc de parcourir leur documentation ici cela montrera que le commit est déjà là Appel AddMigrations - ceci est géré en interne par

en utilisant des transactions ofc - très sympa :)

--no-transaction选项,我们可以使用它来完全控制dbIl en va de même pour SQL, comme nous pouvons le voir

ici🎜🎜 🎜pkg fournit également 🎜 objets - génial ! 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer