Maison  >  Article  >  base de données  >  Explication détaillée des transactions de la base de données MySQL et du moteur de stockage

Explication détaillée des transactions de la base de données MySQL et du moteur de stockage

青灯夜游
青灯夜游avant
2019-11-27 18:07:162431parcourir

Explication détaillée des transactions de la base de données MySQL et du moteur de stockage

1. Bases de données relationnelles et bases de données non relationnelles

1. 🎜>

1) Les données apparaissent sous la forme d'un tableau

2) Chaque ligne a différents noms d'enregistrement

3) Le champ de données correspondant au nom de l'enregistrement dans chaque colonne

4) De nombreuses lignes et colonnes forment un formulaire

5) Plusieurs formulaires forment une base de données

2. Avantages de la base de données relationnelle :

1) Requêtes complexes : les instructions SQL peuvent être utilisées pour plus de commodité Effectuez des requêtes de données très complexes entre une table et plusieurs tables.

2) Prise en charge des transactions : permet de répondre aux exigences d'accès aux données avec des performances de sécurité élevées.

3. Avantages des bases de données non relationnelles :

1) Performance : NOSQL est basé sur des paires clé-valeur, que l'on peut imaginer. sous forme de tables La relation correspondante entre la clé primaire et la valeur n'a pas besoin d'être analysée par la couche SQL, les performances sont donc très élevées.

2) Évolutivité : De plus, parce qu'il est basé sur des paires clé-valeur, il n'y a pas de couplage entre les données, il est donc très facile de l'étendre horizontalement.

Question : Quelles sont les différences entre les trois bases de données traditionnelles ?

Réponse : Les trois sont basés sur la connexion entre les données. La base de données hiérarchique a une structure arborescente et la base de données réseau a une structure de pointeur de lien. -structure de table dimensionnelle.

2. Transaction (ACID)

Une transaction est une série de transactions exécutées comme une seule unité logique de Opérations de travail, ces opérations sont soumises au système ensemble dans leur ensemble, et soit toutes sont exécutées, soit aucune d'entre elles n'est exécutée. Une transaction est une unité logique de travail indivisible.

Les transactions doivent avoir les quatre attributs suivants, appelés attributs ACID :

Atomicité (atomicité) : Une transaction est une opération complète. Chaque opération d'une chose est indissociable (atomique) ; soit toutes sont exécutées, soit aucune n'est exécutée

Consistance (cohérence)  : Lorsque la transaction est terminée, les données doit être dans un état cohérent ;

Isolement (isolement)  : Toutes les transactions simultanées qui modifient les données sont isolées les unes des autres, ce qui indique que les transactions doivent être indépendantes. , elle ne doit en aucun cas dépendre ou affecter d'autres transactions

Durabilité (durabilité)  : Une fois la transaction terminée, ses modifications dans la base de données sont permanentes ; , le journal des transactions peut maintenir la persistance des transactions.

Niveau d'isolement de la transaction :

Lire le contenu non engagé (également appelé dirty read read non validé) : signifie que toutes les transactions peuvent voir les résultats d'exécution d'autres transactions non validées. Il peut y avoir des problèmes de lecture sale, de lecture non reproductible et de lecture fantôme.

Lire le contenu validé (lire validé) : une transaction ne peut voir que les modifications apportées par les transactions validées. Les lectures sales peuvent être évitées, et des problèmes peuvent survenir avec les lectures non répétables et les lectures fantômes.

Lecture répétable (lecture répétable) : il s'agit du niveau d'isolation des transactions par défaut de MySQL. Il garantit que lorsque plusieurs instances de la même transaction lisent des données simultanément, elles le font. verra les mêmes lignes de données. Les lectures sales et les lectures non répétables peuvent être évitées, et des lectures fantômes peuvent se produire.

Sérialisable (sérialisable) : il s'agit du niveau d'isolement le plus élevé. Il ajoute un verrou partagé à chaque ligne de données lues pour éviter tout conflit de lecture. les uns les autres, résolvant ainsi le problème de la lecture fantôme. Les lectures sales, les lectures non répétables et les lectures fantômes peuvent être évitées.

Problèmes causés par des transactions simultanées :

1. 🎜> : Deux transactions T1 et T2 ont lu et modifié les mêmes données. Le résultat soumis par T2 écrase le résultat soumis par T1, entraînant la perte de la modification de T1.

2. Lecture sale : La transaction T1 a modifié certaines données et les a réécrites sur le disque. Après que la transaction T2 ait lu les mêmes données, T1 en raison de certaines données. La raison est révoquée. À ce moment, les données modifiées de T1 sont restaurées à leur valeur d'origine. Les données lues par T2 sont incohérentes avec les données de la base de données. Les données lues par T2 sont alors des données « sales », c'est-à-dire incorrectes. données.

3. Lecture non répétable  : fait référence à la lecture des mêmes données plusieurs fois au sein d'une transaction. Avant la fin de cette transaction, une autre transaction a également accédé aux mêmes données. Ensuite, entre les deux données lues lors de la première transaction, du fait de la modification de la deuxième transaction, les données lues deux fois par la première transaction peuvent être différentes. Cela signifie que les données lues deux fois par la même requête au sein d'une transaction sont différentes, on parle donc de lecture non répétable.

4. Lecture fantôme : Par exemple : Il y a actuellement 10 employés avec un salaire de 5 000. La transaction A lit les 10 employés avec un salaire de 5 000. A cette époque, la transaction B a inséré un enregistrement avec un salaire de 5 000. À ce stade, la transaction A lit à nouveau les employés avec un salaire de 5 000 et l'enregistrement est 11. A ce moment, une lecture fantôme se produit.

Quelle est la différence entre une lecture non répétable et une lecture fantôme ? L'objectif de la lecture non répétable est la modification, et l'objectif de la lecture fantôme est l'ajout ou la suppression.

MVCC (mécanisme de contrôle de concurrence multi-version) : Le MVCC d'InnoDB est transmis après chaque ligne d'enregistrements. est obtenu en sauvegardant deux colonnes cachées. L'heure de création de la ligne et l'heure de suppression de la ligne sont respectivement enregistrées (ce qui est stocké ici n'est pas la valeur temporelle réelle, mais le numéro de version du système). Chaque fois qu'une nouvelle transaction est démarrée, le numéro de version du système est automatiquement incrémenté. Le numéro de version du système au début de la transaction sera utilisé comme ID de transaction pour comparer avec le numéro de version de chaque ligne d'enregistrements interrogés. Après avoir utilisé MVCC, les lectures fantômes ne se produiront pas sous le niveau d'isolement de lecture répétable.

3. Moteur de stockage

Le moteur de stockage est l'organisation logicielle sous-jacente de la base de données. Le système de gestion de base de données (SGBD) utilise les données. moteur pour créer, interroger, mettre à jour et supprimer des données.

1. InnoDB (méthode d'index clusterisé)

La structure de stockage sous-jacente d'innodb est un arbre B+, et chaque nœud de l'arbre correspond sur une page de innodb , la taille de la page est fixe, généralement définie sur 16 Ko. Les nœuds non-feuilles n'ont que des valeurs clés et les nœuds feuilles contiennent des données complètes.

Scénarios d'utilisation : 1) Tables fréquemment mises à jour qui gèrent plusieurs demandes de mise à jour simultanées

2) Prise en charge des tables sécurisées pour les transactions (ACID), prend en charge les verrous de ligne et les clés étrangères

3) Peut être restauré via les journaux bin-log, etc.

innodb si aucune clé primaire n'est défini, une clé primaire de 6 octets sera automatiquement générée (non visible par l'utilisateur).

2. MyISAM (méthode d'index non clusterisé)

MyISAM était le moteur de stockage par défaut de MySQL avant 5.1, qui mettait l'accent sur les performances, mais il ne prend pas en charge les transactions, ni les verrous de ligne et les clés étrangères. Il prend en charge les verrous de table lors de l'insertion ou de la mise à jour de données, la table entière doit être verrouillée et l'efficacité sera moindre. Seul l'index est mis en cache, pas les données réelles. MyISAM lit les données très rapidement et n'occupe pas beaucoup de ressources de mémoire et de stockage.

MyISAM ne permet l'existence d'aucune clé primaire et est une structure d'index statique.

Question : Quelle est la différence entre MyISAM et InnoDB dans MySQL ?

Réponse : Dans la base de données MySQL, les deux moteurs les plus couramment utilisés sont innodb et myisam. InnoDB est actuellement le moteur de stockage par défaut pour MySQL.

1) Transactions : MyISAM met l'accent sur les performances et la vitesse des requêtes est plus rapide que le type InnoDB, mais il ne prend pas en charge les transactions. InnoDB fournit un support pour les transactions.

2) Clés étrangères : MyISAM ne prend pas en charge les clés étrangères, mais InnoDB prend en charge les clés étrangères.

3) Verrous : MyISAM ne prend en charge que les verrous au niveau de la table. InnoDB prend en charge les verrous au niveau de la ligne et les verrous au niveau de la table. La valeur par défaut est que les verrous au niveau de la ligne améliorent considérablement les performances. des performances simultanées multi-utilisateurs. innodb est plus adapté aux situations où il existe de nombreuses opérations d'insertion et de mise à jour, tandis que myisam convient aux situations où les requêtes sont fréquentes. De plus, le verrouillage des lignes de la table innodb n'est pas absolu. Si MySQL ne peut pas déterminer la plage à analyser lors de l'exécution d'une instruction SQL, innodb verrouillera également la table entière, par exemple : update table set num=1 which name like ". %aaa%".

4) Index de texte intégral : MyISAM prend en charge l'index de texte intégral, Innodb ne prend pas en charge l'index de texte intégral. innodb fournit un support d'index en texte intégral à partir de MySQL 5.6.

5) Clé primaire de table : Myisam permet aux tables sans clés primaires d'exister ; innodb : Si aucune clé primaire n'est définie, une clé primaire de 6 octets sera automatiquement générée (non visible par l'utilisateur).

6) Le nombre spécifique de lignes dans le tableau : myisam : sélectionnez count(*) dans le tableau, myisam lit simplement le nombre de lignes enregistrées. Parce que myisam a un compteur intégré, il lit directement à partir du compteur lors du comptage (*).

innodb : n'enregistre pas le nombre spécifique de lignes dans la table. C'est-à-dire que lors de l'exécution de select count(*) from table, innodb analysera la table entière pour calculer le nombre de lignes.

Apprentissage recommandé : Tutoriel 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer