Maison > Article > base de données > Caractéristiques ACID et méthodes d'implémentation des transactions de bases de données relationnelles MySQL
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.
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.
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
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!