J'ai une question concernant la gestion de la verrouillage et de la transaction MySQL. Ma question est ..does MySQL prend la serrure sur le tuple/table sur lequel je suis en train de sélectionner/mettre à jour dans une transaction?
Avec Myisam, vous pouvez utiliser le concurrent_insert=2
Optimisation, où un INSERT
ne bloquera pas les déclarations existantes ou nouvelles SELECT
(mais bloquera tout autre chose).
Avec InnoDB, les règles sont:
SELECT
s ne bloque jamaisUPDATE
ou DELETE
sur une ligne placera une serrure sur ladite ligne. Mais cela peut travailler même si la même ligne est d'être SELECT
ed.INSERT
s sont plus compliqués: si la table a une AUTO_INCREMENT
, alors qui est verrouillé (bien que d'autres opérations simultanées soient autorisées si elles ne sont pas en concurrence pour AUTO_INCREMENT
)INSERT
s peuvent se bloquer les uns des autres car le verrouillage est effectué sur l'indice en cluster.DELETE
s, UPDATE
s sur des plages sont également plus complexes et impliquer des blocs Firther en raison de verrous sur l'index en cluster.Ce n'est probablement pas une liste complète, mais devrait vous obtenir la photo générale.
Chaque insertion, mise à jour et suppression effectue une serrure de table complète avant de jouer dans la commande SQL.
MySQL - (( [~ # ~ ~] acide [~ # ~ ~] - Moteur de stockage conforme, Innodb effectue le niveau de rangée (TUPLE- niveau) verrouillage. InnoDB effectue [~ # ~] MVCC [~ # ~ ~] pour prendre en charge isolation de transaction . Le niveau d'isolement de la transaction dans les innodb sont
Il y a d'autres messages que j'ai pour regarder sur le point de voir comment InnoDB et Myisam diffèrent
Apr 14, 2011
: Quelles sont les principales différences entre Innodb et Myisam?Sep 14, 2011
: Avantages du verrouillage de niveau de tableSep 20, 2011
: meilleur de myisam et innodbFeb 28, 2012
: lire avant la transaction d'écritureMay 02, 2012
: Quel moteur de stockage MySQL choisir?May 03, 2012
: qui est plus rapide, innodb ou myisam?May 16, 2012
: Pourquoi InnoDb stocke-t-il le nombre de lignes?