MySQL résume le principe MVCC d'InnoDB
Cet article vous apporte des connaissances pertinentes sur mysql, qui introduit principalement les problèmes liés au principe MVCC d'InnoDB MVCC est un contrôle de concurrence multi-version, principalement pour améliorer les performances de concurrence de la base de données. j'espère que cela aide tout le monde.
Apprentissage recommandé : Tutoriel vidéo mysql
MVCC signifie Multi-Version Concurrency Control, qui est un contrôle de concurrence multi-version, principalement destiné à améliorer les performances de concurrence de la base de données. Lorsqu'une demande de lecture ou d'écriture se produit pour la même ligne de données, elle sera verrouillée et bloquée. Mais MVCC utilise une meilleure façon de gérer les requêtes de lecture-écriture, de sorte qu'aucun verrouillage ne se produise lorsqu'un conflit de requêtes de lecture-écriture se produit. Cette lecture fait référence à la lecture de l'instantané, et non à la lecture actuelle. La lecture actuelle est une opération de verrouillage et est un verrou pessimiste. Alors, comment parvient-il à lire et à écrire sans verrouillage ? Que signifient la lecture d'instantané et la lecture actuelle ? Nous l’apprendrons tous plus tard.
MySQL peut largement éviter les problèmes de lecture fantôme sous le niveau d'isolement REPEATABLE READ. Comment MySQL fait-il cela ?
Chaîne de versions
Nous savons que pour les tables utilisant le moteur de stockage InnoDB, ses enregistrements d'index cluster contiennent deux colonnes cachées nécessaires (row_id n'est pas nécessaire, la table que nous avons créée a une clé primaire ou une clé UNIQUE non NULL le fera n'inclut pas la colonne row_id) :
trx_id : chaque fois qu'une transaction modifie un enregistrement d'index clusterisé, l'identifiant de la transaction sera attribué à la colonne cachée trx_id.
roll_pointer : chaque fois qu'un enregistrement d'index clusterisé est modifié, l'ancienne version sera écrite dans le journal d'annulation. Cette colonne cachée équivaut à un pointeur, qui peut être utilisé pour trouver l'enregistrement avant les informations de modification.
Pour illustrer ce problème, nous créons une table de démonstration :
CREATE TABLE `teacher` ( `number` int(11) NOT NULL, `name` varchar(100) DEFAULT NULL, `domain` varchar(100) DEFAULT NULL, PRIMARY KEY (`number`)) ENGINE=InnoDB DEFAULT CHARSET=utf8
Insérons ensuite une donnée dans cette table :
mysql> insert into teacher values(1, 'J', 'Java');Query OK, 1 row affected (0.01 sec)
Les données ressemblent maintenant à ceci :
mysql> select * from teacher; +--------+------+--------+ | number | name | domain | +--------+------+--------+ | 1 | J | Java | +--------+------+--------+ 1 row in set (0.00 sec)
Supposons que l'ID de transaction d'insertion de l'enregistrement est 60 , alors le diagramme schématique de l'enregistrement à ce moment est le suivant :
Supposons que deux transactions avec les ID de transaction 80 et 120 effectuent des opérations de MISE À JOUR sur cet enregistrement. Le processus d'opération est le suivant :
Trx80 | Trx120 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
begin | ||||||||||
begin | ||||||||||
mettre à jour le nom de l'enseignant = 'S' où numéro = 1; | ||||||||||
mettre à jour le professeur définir le nom = 'T' où numéro = 1; ; | ||||||||||
commit |
T1 | T2 |
---|---|
begin; | |
sélectionner * de l'enseignant où nombre=30 ; | |
insérer dans les valeurs de l'enseignant (30, 'X', 'Java') ; enseignant où nombre = 30 ; a des données |
|
Eh bien, que se passe-t-il ? La transaction T1 présente évidemment un phénomène de lecture fantôme. Sous le niveau d'isolement REPEATABLE READ, T1 génère un ReadView lors de la première exécution d'une instruction SELECT normale, puis T2 insère un nouvel enregistrement dans la table professeur et le soumet. ReadView ne peut pas empêcher T1 d'exécuter l'instruction UPDATE ou DELETE pour modifier l'enregistrement nouvellement inséré (puisque T2 a déjà soumis, la modification de l'enregistrement ne provoquera pas de blocage), mais de cette façon, la valeur de la colonne cachée trx_id de ce nouvel enregistrement sera be Cela devient l'identifiant de transaction de T1. Après cela, T1 peut voir cet enregistrement lorsqu'il utilise une instruction SELECT ordinaire pour interroger cet enregistrement et peut renvoyer cet enregistrement au client. Du fait de l'existence de ce phénomène particulier, on peut aussi penser que MVCC ne peut pas interdire complètement la lecture fantôme. Résumé MVCCNous pouvons voir dans la description ci-dessus que ce que l'on appelle MVCC (Multi-Version ConcurrencyControl, contrôle de concurrence multi-version) fait référence à l'utilisation des deux niveaux d'isolement de READ COMMITTD et REPEATABLE READ pour exécuter des transactions ordinaires. L'opération SELECT est le processus d'accès à la chaîne de versions enregistrées. Cela permet aux opérations de lecture-écriture et d'écriture-lecture de différentes transactions d'être exécutées simultanément, améliorant ainsi les performances du système. Une grande différence entre les deux niveaux d'isolement de READ COMMITTD et REPEATABLE READ est que le moment de génération de ReadView est différent. READ COMMITTD générera un ReadView avant chaque opération SELECT ordinaire, tandis que REPEATABLE READ ne générera un ReadView que pour la première fois. . Générez simplement un ReadView avant l'opération SELECT et réutilisez ce ReadView pour les opérations de requête ultérieures, évitant ainsi fondamentalement le phénomène de lecture fantôme. Nous avons dit auparavant que l'exécution d'une instruction DELETE ou d'une instruction UPDATE qui met à jour la clé primaire ne supprimera pas immédiatement l'enregistrement correspondant de la page, mais effectuera ce qu'on appelle l'opération de suppression de marque, ce qui équivaut à simplement définir un. supprimer l'indicateur sur l'enregistrement. Ceci est principalement pour MVCC. De plus, ce qu'on appelle MVCC ne prend effet que lorsque nous effectuons des requêtes SEELCT ordinaires. Toutes les instructions SELECT que nous avons vues jusqu'à présent sont des requêtes ordinaires. Quant à ce qu'est une requête extraordinaire, nous en reparlerons plus tard. Apprentissage recommandé : Tutoriel vidéo mysql |
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds











Laravel est un cadre PHP pour la création facile des applications Web. Il fournit une gamme de fonctionnalités puissantes, notamment: Installation: Installez le Laravel CLI globalement avec Composer et créez des applications dans le répertoire du projet. Routage: définissez la relation entre l'URL et le gestionnaire dans Routes / web.php. Voir: Créez une vue dans les ressources / vues pour rendre l'interface de l'application. Intégration de la base de données: fournit une intégration prête à l'emploi avec des bases de données telles que MySQL et utilise la migration pour créer et modifier des tables. Modèle et contrôleur: le modèle représente l'entité de la base de données et le contrôleur traite les demandes HTTP.

MySQL et PHPMyAdmin sont de puissants outils de gestion de la base de données. 1) MySQL est utilisé pour créer des bases de données et des tables et pour exécuter des requêtes DML et SQL. 2) PHPMYADMIN fournit une interface intuitive pour la gestion des bases de données, la gestion de la structure de la table, les opérations de données et la gestion de l'autorisation des utilisateurs.

Par rapport à d'autres langages de programmation, MySQL est principalement utilisé pour stocker et gérer les données, tandis que d'autres langages tels que Python, Java et C sont utilisés pour le traitement logique et le développement d'applications. MySQL est connu pour ses performances élevées, son évolutivité et son support multiplateforme, adapté aux besoins de gestion des données, tandis que d'autres langues présentent des avantages dans leurs domaines respectifs tels que l'analyse des données, les applications d'entreprise et la programmation système.

Résumé de l'article: Cet article fournit des instructions détaillées étape par étape pour guider les lecteurs sur la façon d'installer facilement le cadre Laravel. Laravel est un puissant cadre PHP qui accélère le processus de développement des applications Web. Ce didacticiel couvre le processus d'installation des exigences du système à la configuration des bases de données et à la configuration du routage. En suivant ces étapes, les lecteurs peuvent jeter rapidement et efficacement une base solide pour leur projet Laravel.

Dans MySQL, la fonction des clés étrangères est d'établir la relation entre les tables et d'assurer la cohérence et l'intégrité des données. Les clés étrangères maintiennent l'efficacité des données grâce à des contrôles d'intégrité de référence et aux opérations en cascade. Faites attention à l'optimisation des performances et évitez les erreurs courantes lorsque vous les utilisez.

La principale différence entre MySQL et MARIADB est les performances, les fonctionnalités et la licence: 1. MySQL est développé par Oracle, et MariADB est sa fourche. 2. MariaDB peut mieux fonctionner dans des environnements à haute charge. 3.MariaDB fournit plus de moteurs et de fonctions de stockage. 4.MySQL adopte une double licence et MariaDB est entièrement open source. L'infrastructure existante, les exigences de performance, les exigences fonctionnelles et les coûts de licence doivent être pris en compte lors du choix.

SQL est un langage standard pour gérer les bases de données relationnelles, tandis que MySQL est un système de gestion de bases de données qui utilise SQL. SQL définit les moyens d'interagir avec une base de données, y compris les opérations CRUD, tandis que MySQL implémente la norme SQL et fournit des fonctionnalités supplémentaires telles que les procédures stockées et les déclencheurs.

MySQL et PHPMYADMIN peuvent être gérés efficacement via les étapes suivantes: 1. Créer et supprimer la base de données: cliquez simplement dans phpMyAdmin pour terminer. 2. Gérer les tables: vous pouvez créer des tables, modifier les structures et ajouter des index. 3. Fonctionnement des données: prend en charge l'insertion, la mise à jour, la suppression des données et l'exécution des requêtes SQL. 4. Données d'importation et d'exportation: prend en charge les formats SQL, CSV, XML et autres. 5. Optimisation et surveillance: utilisez la commande Optimizetable pour optimiser les tables et utiliser des analyseurs de requête et des outils de surveillance pour résoudre les problèmes de performances.
