Maison  >  Article  >  base de données  >  À propos de Mysql transactionnel

À propos de Mysql transactionnel

一个新手
一个新手original
2017-10-13 10:30:141296parcourir

1》À quoi fait référence la transaction ?
     La transaction peut être considérée comme une unité de traitement de logique métier, qui est soit exécutée, soit non exécutée (Cohérence)
Il y a 3 000 yuans dans le compte A, le compte B est rapide à 2 000,
-A-500. -"B
Le compte A et le compte B c'est 5000 rapide
avant la mise en place et l'exécution des choses. Après, cette somme et cet état doivent être cohérents.
                                  conduit à travers dans dans dans 30 00 3000    sélectionnez sun() entre A B Somme
(4) Durabilité (Durabilité)
Durabilité garantie :
1> Avant transaction :
Le les données ont été écrites sur le disque avant la transaction. Que faire si elles doivent être retirées ? Données rappelées du disque ? Très lent ? Très douloureux ? ce qu'il faut faire?
2 & gt; combiné avec le transactionnaliste pour compléter le
Connectez-vous à la chose, il y a aussi un disque Alors quelle est la différence entre celui-ci et le fichier de données ?
              Différence : le journal des transactions génère des E/S séquentielles, tandis que le fichier de données du disque est une E/S aléatoire. Chaque opération du journal des transactions est écrite séquentiellement dans un bloc de stockage continu sur le disque, et notre fichier de données n'est pas le cas.
                                                                                                                                            E/S séquentielles                           Les données de la transaction sont réimplémentées dans des fichiers de données, de cette façon nous garantissons la persistance des données exploitées par les objets.

3》Le statut de la transaction.
                                       nous informe sur l'état de la transaction, qu'est-ce que la soumission partielle ?
est l'exécution de la transaction, une partie du disque a été écrite et l'autre est en cours d'exécution. La dernière instruction d'exécution est en cours d'écriture, mais n'a pas atteint l'objectif, appelée transactions échouées
(4. ) transactions suspendues
la suspension est appelée non-soumission, ou à mi-chemin, elle est terminée à l'avance, appelée suspension.
(5) Transaction soumise
Pour une transaction soumise saine, notre transaction doit exister dans l'un de ces cinq états. Une fois la transaction soumise, elle ne peut pas être révoquée.

4》Concurrence et planification des transactions
  Concurrence des transactions :
    1>Améliorer le débit et l'utilisation des ressources
                                                         particulièrement Nous dans les transactions S'engager entre les transactions afin de réduire les effets de chacun Entre les effets, nous avons besoin pour isoler la transaction, que se passe-t-il si elle est isolée ? Cela dépend de la planification des transactions. Tout système de base de données lui-même a une telle complexité dans la planification des transactions. La méthode de planification intègre de nombreuses stratégies pour terminer la planification. De manière générale, afin de garantir l'isolement et l'atomicité des transactions, ils doivent utiliser la planification des transactions. terminé, il existe deux stratégies de planification courantes :
  

planification des transactions :
1 & gt; peut restaurer la planification
Généralement, lorsque les deux transactions sont planifiées entre elles, l'exécution croisée de deux transactions ne modifiera pas l'état d'une autre transaction. Appelez-le : planification de récupération

2 & gt; ajustement conjoint sans niveau
planification de récupération et étape par étape signifie qu'après la fin de la transaction, il n'y a aucun impact entre eux, en particulier dans les affaires, dans affaires, dans les affaires, dans les affaires Il sera toujours affecté lors de la restauration, et il le sera toujours lorsque la transaction sera annulée. Par conséquent, afin d'éviter l'impact lors de la restauration, vous pouvez également implémenter ce qu'on appelle : cascade-. planification gratuite.

5》Isolement des transactions
Nous connaissons la planification des transactions. Une transaction peut impliquer plusieurs opérations. Ces opérations peuvent être exécutées de manière transversale. L'existence de la planification des transactions consiste à mieux planifier l'ordre afin que celles-ci soient exécutées de manière transversale. les exécutions croisées peuvent être interconnectées les unes aux autres. Cela n'aura pas d'impact excessif, donc afin de réduire davantage l'impact entre les transactions, nous avons ce que l'on appelle les niveaux d'isolement. Il existe quatre niveaux d'isolement pour les transactions. Quels quatre ?
1 & gt; Lecture de lecture non validée
Au niveau d'isolement, toutes les transactions peuvent voir les résultats d'exécution d'autres transactions non préparées. Dans quelle mesure le niveau de lecture de données non validées est-il également appelé : Lecture sale
2>. ;read commit read commit
Le niveau d'isolement par défaut de la plupart des bases de données (mais le niveau par défaut de Mysql n'est pas celui-ci) ), qui satisfait à la simple définition de l'isolement : une transaction ne peut voir que les modifications apportées par les transactions qui ont déjà été validées ; Lorsque plusieurs instances lisent des données simultanément, elles verront les mêmes lignes de données. Cependant, en théorie, cela conduit à un autre problème : la lecture fantôme (lecture fantôme fait référence à la lecture d'une certaine plage en tant qu'utilisateur). la ligne de données est dans cette plage, une autre transaction insère une nouvelle ligne dans cette plage. Lorsque l'utilisateur lit la ligne de données dans cette plage, il trouvera une nouvelle "ligne fantôme"
. Le mécanisme de contrôle de concurrence (MVCC) résout ce problème.

4>Sérialisable

Il s'agit du mécanisme d'isolation de plus haut niveau. Il résout le problème de lecture fantôme en forçant les transactions à être triées afin que leurs étapes puissent entrer en conflit les unes avec les autres : il s'agit d'un verrou partagé. est ajouté à chaque ligne de données lues. À ce niveau, cela peut entraîner un grand nombre de délais d'attente et une concurrence de verrouillage est mise en œuvre, et notre technologie de contrôle simultané

en temps réel dépend de plusieurs technologies :
( 1) Verrouiller. Lire le verrou, écrire les verrous, monopoliser les verrous, partager les verrous
(2). Horodatage, vous devez enregistrer l'heure de début et l'heure d'exécution de chaque transaction
(3). isolement

extension supplémentaire :
état de famine (faim) : Lorsqu'une transaction est appliquée pour un type de verrouillage, afin d'obtenir un contrôle de concurrence, elle est prête à avoir besoin ce verrou, mais en raison du résultat de la planification de la transaction, il n'a pas pu obtenir le verrou. De plus, il existe un autre type de verrou appelé : deadlock

6》Démarrer la transaction et annulation

De manière générale, l'opération de démarrage d'une transaction : Annulation de la transaction
     > 3 & gt; > 6.1 Affaires Rolling Opération réelle :
1 & GT ; Démarrer une transaction
Démarrer la transaction
2 & GT ; Supprimer les informations dans l'une des tables des étudiants
Supprimer de l'étudiant où num='4 '
3>Comment effectuer une récupération de données ? Annulation des transactions. Je l'ai deviné.
                                 restauration ;
                                                                                                            sélectionner * parmi les étudiants ;

3>Soumission de la transaction
4 & gt; essayez de revenir en arrière
restauration
5 & gt;
                                                                                                                                                select * from student ; , je l'ai implémenté dans l'article 80. À ce moment-là, j'ai trouvé que le 75e était erroné et que l'exécution était incorrecte. Dois-je annuler les 80 premiers ? ? Le rôle des points de sauvegarde apparaît. Par exemple : J'enregistre toutes les 10 opérations : ​ ​ ​ ​ ​ ​ ​ 1> Transaction
                                                                                                                                       ; Enregistrer un point de transaction
     savepoint yya 3 & gt; Tables des étudiants

Supprimer de l'étudiant où nom = 'ximenchuiniu'

Point de sauvegarde yyb
4 & gt; Table "Niu Er" Les informations SUPPRIMER de l'étudiant où nom = 'niuer'
Point de sauvegarde yyb
5 & gt; D'accord, commencez la restauration
Si vous souhaitez restaurer Ximen Blowing Snow
Rollback To YYA. Quel est le point de sauvegarde, oui ?
6 & gt; voyez si vous avez repris le succès
SELECT * De l'étudiant

6.3 Soumission automatique des transactions
1>Requête de la soumission automatique des transactions mysql
sélectionnez @@autocommit;
sélectionnez @@ autocommit;
                                                                                                  ----+
                                                     | 1 1 1 1 |
------+ 1 ligne dans l'ensemble (0,00 SEC)

2 & GT ; Modifier mysql pour soumettre automatiquement
Set AutoCommit = 0


3 & GT ; Test de vérification
                                                                                                                                                                                                                                        Supprimer de l'élève où name='ximenchuniu'
                     restauration ; Et nous n’avons pas explicitement lancé de transaction ? Les transactions prennent en charge la restauration des instructions DML. DDL est une validation de test cachée, elle n'est donc malheureusement pas prise en charge.

Vérifiez que la lecture n'est pas validée :
Interrogez le niveau d'isolement, sélectionnez @@tx_isolation;

Modifiez le niveau d'isolement défini tx_isolation='read_uncommittd ';

Un mysql, ouvrez deux fenêtres, et démarrer une transaction transversale
Fenêtre un et fenêtre deux opérations courantes :
1.select @@tx_isolation;
2.set tx_isolation='read_uncommittd ';

Opération fenêtre 1 :
​​​​​1.start transaction; Démarrer une transaction croisée
          2.mettre à jour l'ensemble des étudiants age='70' où d_id='1010';

Opération Windows 2
        1.start transaction ;Démarrer une transaction croisée 2.Sélectionner * de StudentVous pouvez voir que la fenêtre 1 est remplacée par 70, la transaction de fenêtre n'est pas soumise et la fenêtre 2 est vue par 2. Deux fenêtres, les deux parties démarrent de manière croisée. une transaction
Opérations courantes de la fenêtre 1 et de la fenêtre 2 :
1.select @@tx_isolation;
2.set tx_isolation='read_committd ';

opération de la fenêtre 1 :

1 .start transaction; démarrer une transaction croisée
2.update student set age='70'where d_id='1010';
3.commit Uniquement soumis ici, dans 2 La troisième étape de la fenêtre verra le données soumises à nouveau

Opération de la fenêtre 2
1. démarrer la transaction ; démarrer une transaction croisée
2.Sélectionner * de l'étudiant ; Données mises à jour
3.sélectionner * de l'étudiant Seulement après le A ; la fenêtre a exécuté 3 étapes de soumission, pouvez-vous voir les données mises à jour pour éviter les lectures sales                                  

La vérification peut être lue
Un MySQL, ouvrez deux fenêtres et les deux parties traversent la transaction. L'instruction de requête le même jour obtient un nombre différent d'enregistrements, appelé lecture fantôme

. Opérations courantes de la fenêtre 1 et de la fenêtre 2 :
1.select @@tx_isolation;
2.set tx_isolation='repeatable-read ';

Opération de la fenêtre 1
1.start transaction; Démarrer une transaction croisée
2.mettre à jour l'ensemble étudiant age='60' où num='10';
3.commit ;

Opération fenêtre 2
1.démarrer la transaction ; transaction croisée
2.select * from student; Les données mises à jour de la fenêtre 1 ne sont pas vues
3.select * from student ; 1commit;Toujours pas voir les données mises à jour dans la fenêtre 1
Deux fenêtres, les deux parties démarrer une transaction de manière croisée
Opérations courantes de la fenêtre 1 et de la fenêtre 2 :
1.select @@tx_isolation;

2.set tx_isolation='serializing';


Opération de la fenêtre 1
1.start transaction ; démarrer une transaction croisée
2.update student set age='60' où num='10' ; Il ne peut être exécuté qu'après que Windows 2 ait soumis l'opération !
Opération de la fenêtre 2
1.start Transaction ; Démarrer une transaction croisée
2.Soumettre ici, la mise à jour de la 1 fenêtre peut être exécutée avec succès. C'est sérialisable !
Raison :
Lorsque deux transactions sont exécutées de manière croisée pour modifier les mêmes données en même temps, une partie doit d'abord les soumettre. Sinon, la lecture et l’écriture se bloqueront.

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn