ACID sind die vier Merkmale, die vorhanden sein müssen, um sicherzustellen, dass die Transaktion korrekt und zuverlässig ist:
Atomizität: Die Vorgänge in der Transaktion sind gleichzeitig Erfolg oder Misserfolg.
Konsistenz: Datenbanktransaktionen können die Integrität der Daten und die Konsistenz der Geschäftslogik nicht zerstören.
Isolierung: Eine Transaktion hat keinen Einfluss auf den Betrieb anderer Transaktionen.
Dauerhaftigkeit: Nach Abschluss der Transaktion sollten die durch die Transaktion vorgenommenen Änderungen in der Datenbank gespeichert bleiben und werden nicht zurückgesetzt.
Nehmen Sie als Beispiel, dass A 100 Yuan an B überweist:
Atomizität: A verliert 100 Yuan und B erhält 100 Yuan gleichzeitig.
Konsistenz: As Konto darf nach dem Verlust von 100 Yuan nicht negativ sein.
Isolierung: Wenn Konto A bei der Ausführung von Transaktion B 1 Yuan verliert, während diese Transaktion ausgeführt wird, sollte der endgültige Verlust 101 Yuan betragen, und die beiden haben keinen Einfluss aufeinander.
Beharrlichkeit: As Konto kann es nicht zurückerhalten, nachdem es 100 Yuan verloren hat.
MySQL-Transaktionen werden von der InnoDB-Speicher-Engine implementiert.
Sie können den folgenden Befehl verwenden, um eine Transaktion explizit zu starten:
start transaction / (Begin); #一条或多条sql语句 Commit;
Darüber hinaus ist im Autocommit-Modus (Autocommit) jede von uns ausgeführte SQL-Anweisung eine unabhängige Transaktion; , alle SQL-Anweisungen sind in einer Transaktion, bis ein Commit oder Rollback ausgeführt wird, die Transaktion endet und eine andere Transaktion beginnt.
Die ACID-Eigenschaften von MySQL-Transaktionen werden durch den folgenden Mechanismus implementiert:
Atomizität: Undo-Protokoll, logisches Protokoll, zeichnet Informationen im Zusammenhang mit der SQL-Ausführung auf. Wenn ein Rollback auftritt, führt InnoDB basierend auf dem Inhalt des Rückgängig-Protokolls das Gegenteil der vorherigen Arbeit durch .
Isolierung: Sperrmechanismus mit MVCC.
Konsistenz: Das Design der Datenbank selbst.
3. Verwendung von Gorm-Transaktionen
Go-Sprache Gorm bietet Unterstützung für Transaktionsvorgänge:db.Transaction(func(tx *gorm.DB) error { // 在事务中执行一些 db 操作(从这里开始,您应该使用 'tx' 而不是 'db') if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil { // 返回任何错误都会回滚事务 return err } if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil { return err } // 返回 nil 提交事务 return nil })
4. Die Verwendung von Spring-Transaktionen Unter normalen Umständen wird empfohlen, der Methode die Annotation @Transactional hinzuzufügen, da @Transactional direkt zur Klasse oder Schnittstelle hinzugefügt wird und die Annotation @Transactional für alle öffentlichen Methoden in der Klasse oder Schnittstelle wirksam ist wird sich auf die Leistung auswirken. Das obige ist der detaillierte Inhalt vonACID-Eigenschaften und Implementierungsmethoden relationaler MySQL-Datenbanktransaktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!public class AClass {
@Transactional(rollbackFor = Exception.class)
public void aFunction() {
//todo: 数据库操作A(增,删,该)
}
}