Heim > Datenbank > MySQL-Tutorial > Hauptteil

ACID-Eigenschaften und Implementierungsmethoden relationaler MySQL-Datenbanktransaktionen

PHPz
Freigeben: 2023-05-28 17:01:27
nach vorne
1709 Leute haben es durchsucht

1. Detaillierte ACID-Merkmale von Transaktionen

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.

2. Implementierung von MySQL-Transaktionen

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;
Nach dem Login kopieren

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
})
Nach dem Login kopieren

Darüber hinaus gibt es verschachtelte Transaktionen und manuelle Transaktionen usw. Sie können sich auf das chinesische Dokument beziehen: Go GORM-Transaktionen Detaillierte Einführung

4. Die Verwendung von Spring-Transaktionen

public class AClass {

    @Transactional(rollbackFor = Exception.class)
    public void aFunction() {
        //todo: 数据库操作A(增,删,该)
    }
}
Nach dem Login kopieren
@Transaktionelle Annotationen müssen der öffentlichen Methode hinzugefügt werden, private und geschützte Methoden sind ungültig.

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!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage