fonctionnement simultané apportera une série de problèmes
-
Mise à jour perdue (mise à jour perdu)
Lorsque deux ou plusieurs transactions choisissent la même ligne, puis adapté à la valeur initiale est mis à jour, car chaque transaction détournée connaît pas l'existence d'autres questions, le problème des mises à jour perdues peuvent se produire, dernière mise à jour couvert par d'autres entreprises faire la mise à jour
-
lecture sale (Dirty lit)
Une transaction est en cours pour modifier un enregistrement, avant que la transaction est terminée et soumis, les données sur ce disque dans un état incohérent, cette fois, une autre transaction a également lu la même base, sinon contrôlée, la deuxième transaction lire ces données « sales », et par conséquent pour un traitement ultérieur, il va créer la dépendance des données non validées, ce qui est appelé « lecture sale. »
-
lecture non reproductible (non répétable lit)
Une transaction à un certain temps de lire quelques-unes des données, lire les données de lecture antérieures à nouveau, mais a constaté que les données de lecture a changé, ou que certains enregistrements sont supprimés! ! Ceci est appelé lecture non reproductible
(Ne se conforme pas à l'isolement)
-
lecture magique
Une transaction lit les mêmes données de requête EXTRACTION vu avant, mais a trouvé d' autres transactions d'insérer une nouvelle requête de données pour satisfaire ses conditions , un phénomène appelé « lecture fantôme » comme si encore il n'y a pas eu
Réglage du niveau d'isolation des transactions mysql, mysql se verrouille automatiquement pour faire fonctionner les mêmes données en ligne
Pour lecture répétée, en utilisant MySQL mécanisme de MVCC, le contrôle simultané de version multi, le mécanisme de contrôle d'accès concurrentiel multi-version
opération de sélection ne sera pas à jour la version, chaque requête fera un instantané avec une version de l'instantané. Puis, après modification, ainsi que les versions données réelles et instantané sont incompatibles, mais afin de permettre la logique mysql précise, il mettra à jour la base de données lorsque les dernières données est mise à jour, lire et lire la version instantanée des données.
produits de base survendu, qui est, pour cette raison.
https://blog.csdn.net/huaishu/article/details/89924250
Voici un aperçu du courant lu et lu la différence
Les instantanés font des vitesses de lecture un peu. Donc, sélectionnez une autre mise à jour bug sur
Précautions: sql devrait lire: mise à jour de la balance set compte = balance 50 où id = 1;
Répétable lire les mots, sélectionnez pas version mise à jour est bonne, est une lecture instantané (historique des versions), et insérer, mettre à jour et supprimer une bonne version mise à jour, est la lecture en cours (la version actuelle)
Ainsi , après la mise à jour re-ouvrir l'enquête pourrait avoir phénomène de lecture fantôme:
session1: select * from compte;
session2: insert en compte (nom, argent) valeurs ( 'ss', 100);
session1: mise à jour nom de l' ensemble du compte = 'lyr' où id = 1;
session1: select * from compte;
Si session1: Ce tableau ne met pas à jour compte, va lire, lire fantôme problème ne se produit pas avec l'instantané
Cependant: session1: mettre à jour le compte sous cette forme, il va changer la lecture en cours d'une lecture de l'instantané
Et cette fois session2 insérer un nom = « ss », argent = données 100
session1 look-up table, trouver à nouveau une raison comment est-ce que l'illusion de données (apparu fantomatique)
Ceci est la lecture fantôme
Dans le numéro de série, il n'y a aucun problème, mais ne devrait pas être, en raison de la faible efficacité
MySQL avec lecture reproductible à la fois l'efficacité, autant que possible pour résoudre le problème de sale lit et les lectures non reproductibles
Voir mysql informations récentes du journal de blocage:
afficher l'état InnoDB moteur \ G
optimisation mysql:
- Dans la mesure du possible, afin que toutes les données récupérées par l'indexation est terminée, afin d'éviter l'escalade de verrouillage de la ligne non-index à un verrou de table
- La conception rationnelle de l'indice, ce qui réduit la plage de verrouillage
- condition de recherche de récupération pour éviter la dépendance des lacunes
- Essayez de contrôler la taille de la transaction et la durée du temps de réduire la quantité de ressources verrouillées
- Le niveau le plus bas possible l'isolement des transactions
Cela peut résoudre le problème de la concurrence
- mise à jour compte mettre de l'argent = argent-1 où id = 'Llyr' et d'argent> 0;
MySQL peut verrouiller un espace, puis à longue portée mysql verrouillent automatiquement, il est généralement pas une lecture fantôme de problème
La condition est une gamme, mysql Enfermer
Cela permettra de résoudre le problème de la lecture fantôme
https://blog.csdn.net/spring_model/article/details/53992450
Il y a d'autres verrous, comme un verrou exclusif pour la mise à jour comme
mysql mise à jour de déclaration lorsque la transaction lorsque la serrure ouverte, après la sortie de COMMIT
Alors écrire un bon sql, généralement pas un problème.