Heim  >  Artikel  >  Backend-Entwicklung  >  Wann wird die Go Goose-Transaktion eingereicht?

Wann wird die Go Goose-Transaktion eingereicht?

王林
王林nach vorne
2024-02-08 21:54:20619Durchsuche

go goose 事务什么时候提交?

php-Editor Yuzai ist hier, um eine häufig gestellte Frage für alle zu beantworten: „Wann wird die Go-Goose-Transaktion übermittelt?“ In der Go-Sprache hängt die Übermittlung von Transaktionen vom jeweiligen Datenbanktreiber ab. Im Allgemeinen übermittelt die Datenbank beim Durchführen einer Transaktionsfestschreibungsoperation alle Änderungsoperationen der aktuellen Transaktion gleichzeitig an die Datenbank. Dadurch wird die Atomizität der Transaktion sichergestellt, d. h. entweder alle Commits sind erfolgreich oder alle Rollbacks schlagen fehl. Daher liegt der Zeitpunkt der Transaktionsübermittlung bei der Ausführung des Transaktions-Commit-Vorgangs und nicht am Anfang oder Ende der Transaktion. Informationen zu bestimmten Verwendungsmethoden finden Sie in der entsprechenden Datenbanktreiberdokumentation.

Frageninhalt

  • Ich habe Code, der ausgeführt werden muss tx wie unten gezeigt
  • Ich habe eine Go-SQL-Migration erstellt, wie in der offiziellen Dokumentation von go goose
  • beschrieben

Meine Frage ist:

  • Wann werden diese Transaktionen tatsächlich commited in die Datenbank übernommen?
  • Ich musste tx.commit() verwenden, um die Migration einzureichen. Hier ist meine Migrationsdatei in 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
}

Ich kann die oben genannten Migrationen nach dem Abschnitt down nicht mehr ausführen, da beim Ausführen die Meldung errtxdone (Quelle) angezeigt wird. Ich möchte go migration up00002 immer noch mehrmals ausführen (zum Testen). Wie kann ich das machen? Was mache ich hier falsch? down 部分之后运行上述迁移,因为当我运行它们时,我得到了 errtxdone (源)。我仍然想多次运行 go 迁移 up00002 (用于测试)。我怎样才能做到这一点?我在这里做错了什么?

解决方法

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

Workaround

Durchsuchen Sie einfach die Dokumentation hier es wird angezeigt, dass der Commit bereits vorhanden ist AddMigrations-Aufruf – dies wird intern

mithilfe von OFC-Transaktionen abgewickelt – sehr nett :)

--no-transaction选项,我们可以使用它来完全控制dbDas Gleiche gilt für SQL, wie wir

hier🎜🎜 sehen können 🎜pkg bietet auch 🎜 Objekte – großartig! 🎜

Das obige ist der detaillierte Inhalt vonWann wird die Go Goose-Transaktion eingereicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen