Maison >base de données >tutoriel mysql >Caractéristiques ACID et méthodes d'implémentation des transactions de bases de données relationnelles MySQL

Caractéristiques ACID et méthodes d'implémentation des transactions de bases de données relationnelles MySQL

PHPz
PHPzavant
2023-05-28 17:01:271716parcourir

1. Caractéristiques ACID détaillées des transactions

ACID sont les quatre caractéristiques qui doivent être possédées pour garantir que la transaction est correcte et fiable :

  • Atomicité : Les opérations de la transaction sont simultanées Succès ou échec.

  • Cohérence : Les transactions de base de données ne peuvent pas détruire l'intégrité des données et la cohérence de la logique métier.

  • Isolement : Une transaction n'affecte pas le fonctionnement des autres transactions.

  • Durabilité : Une fois la transaction terminée, les modifications apportées par la transaction doivent être conservées dans la base de données et ne seront pas annulées.

Prenons l'exemple de A qui transfère 100 yuans à B :

  • Atomicité : A perd 100 yuans et B reçoit 100 yuans en même temps.

  • Cohérence : Le compte de A ne peut pas être négatif après avoir perdu 100 yuans.

  • Isolement : Si le compte A perd 1 yuan lors de l'exécution de la transaction B lors de l'exécution de cette transaction, alors la perte finale devrait être de 101 yuans, et les deux n'ont aucune influence l'un sur l'autre.

  • Persistance : Le compte de A ne peut pas le récupérer après avoir perdu 100 yuans.

2. Implémentation des transactions MySQL

Les transactions MySQL sont implémentées par le moteur de stockage InnoDB.

Vous pouvez utiliser la commande suivante pour démarrer explicitement une transaction :

start transaction / (Begin);
#一条或多条sql语句
Commit;

De plus, en mode autocommit (autocommit), chaque instruction SQL que nous exécutons est une transaction indépendante si l'autocommit est désactivé (autocommit) ; , toutes les instructions SQL sont dans une transaction jusqu'à ce que la validation ou l'annulation soit exécutée, que la transaction se termine et qu'une autre transaction démarre.

Les caractéristiques ACID des transactions MySQL sont implémentées par le mécanisme suivant :

  • Atomicité : undo log, journal logique, enregistre les informations liées à l'exécution SQL. Lorsqu'une restauration se produit, InnoDB fera le contraire du travail précédent en fonction du contenu du journal d'annulation

  • Persistance : redo log Lorsque la transaction est validée, l'interface fsync sera appelée pour vider le journal de rétablissement. .

  • Isolation : Mécanisme de verrouillage avec MVCC.

  • Cohérence : La conception de la base de données elle-même.

3. Utilisation des transactions Gorm

Le langage Go Gorm fournit un support pour les opérations de transaction :

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
})

De plus, il existe des transactions imbriquées et des transactions manuelles, etc. Vous pouvez vous référer au document chinois : Go GORM Transactions Introduction détaillée

4. L'utilisation de Spring transactions

public class AClass {

    @Transactional(rollbackFor = Exception.class)
    public void aFunction() {
        //todo: 数据库操作A(增,删,该)
    }
}

@L'annotation transactionnelle doit être ajoutée à la méthode publique, les méthodes privées et protégées ne sont pas valides.

Dans des circonstances normales, il est recommandé d'ajouter l'annotation @Transactional à la méthode, car @Transactional est ajouté directement à la classe ou à l'interface, et l'annotation @Transactional sera efficace pour toutes les méthodes publiques de la classe ou de l'interface, ce qui affectera les performances.

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