Maison  >  Questions et réponses  >  le corps du texte

Verrouillage au niveau de la ligne dans Innodb

Innodb implémente deux verrous au niveau des lignes, l'un est un verrou partagé et l'autre est un verrou exclusif.
Excusez-moi :
(1) Les verrous au niveau des lignes peuvent-ils être chargés uniquement sur les enregistrements de lignes ? Pourquoi vois-je mentionner que les verrous partagés et les verrous exclusifs peuvent également être utilisés au niveau de la table ?

Pouvez-vous me donner quelques conseils

过去多啦不再A梦过去多啦不再A梦2712 Il y a quelques jours880

répondre à tous(4)je répondrai

  • PHP中文网

    PHP中文网2017-05-17 10:07:00

    Le verrouillage de ligne d'InnoDB n'est efficace que lorsque l'instruction de verrouillage (c'est-à-dire FOR UPDATE et LOCK IN SHARE MODE) utilise l'index, car InnoDB verrouille en fait la ligne en fonction de l'index. Autrement dit, si aucun index n'est utilisé, le verrou est automatiquement élevé au niveau de la table.

    répondre
    0
  • PHP中文网

    PHP中文网2017-05-17 10:07:00

    Comme mentionné ci-dessus, lorsque le niveau d'isolement des transactions est lu à plusieurs reprises (niveau par défaut de MySQL)
    Lorsque le moteur InnoDB modifie et supprime des données, il trouvera d'abord l'index correspondant. Les index sont tous triés, il verrouillera donc une certaine valeur ou. une gamme.
    Si cette plage correspond à l'intégralité du segment d'index, alors toutes les données de la table seront verrouillées ; de plus, s'il n'y a pas d'index, la table entière sera analysée pour les données lors de la modification et de la suppression, et la table entière sera naturellement verrouillée.

    répondre
    0
  • 迷茫

    迷茫2017-05-17 10:07:00

    InnoDB implémente les deux types de verrous de ligne suivants.
    Verrou(s) partagé(s) : un verrou exclusif qui permet à une transaction de lire une ligne et empêche d'autres transactions d'obtenir le même ensemble de données.
    Verrou exclusif (X) : permet aux transactions qui acquièrent des verrous exclusifs de mettre à jour les données et empêche d'autres transactions d'acquérir des verrous de lecture partagés et des verrous d'écriture exclusifs sur le même ensemble de données.
    De plus, afin de permettre aux verrous de ligne et de table de coexister et de mettre en œuvre un mécanisme de verrouillage multi-granularité, InnoDB dispose également de deux verrous d'intention utilisés en interne (Intention Locks), qui sont tous deux des verrous de table.
    Intention de verrouillage partagé (IS) : La transaction a l'intention de partager le verrou sur la ligne de données. La transaction doit d'abord obtenir le verrou IS de la table avant d'ajouter un verrou partagé à une ligne de données.
    Intention verrou exclusif (IX) : La transaction a l'intention d'ajouter un verrou exclusif à la ligne de données. La transaction doit d'abord obtenir le verrou IX de la table avant d'ajouter un verrou exclusif à une ligne de données.

    Les verrous de ligne sont ajoutés aux lignes, tandis que les verrous de table correspondent à la table entière. Les verrous de rangée et les verrous de table peuvent coexister !

    répondre
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-17 10:07:00

    Les verrous sont communs au moteur MySQL. Les verrous de ligne et les verrous de table se distinguent du point de vue de la granularité du verrouillage

    répondre
    0
  • Annulerrépondre